Tworzenie pliku pdf i błąd "permission danied"

0

Cześć,
tak jak w temacie.Tworzę aplikację która tworzy faktury i zapisuje je na dysku sd w formacie pdf.
Podczas zapisu pokazuje mi się błąd "sdcard/Invoice/invoice.pdf (Permision danied)".Sprawdzałem jakie mam uprawnienia to wygląda na to ,że mam wszystko ok (drwxrwxrwx).
Testowałem aplikację na androida 5.1 oraz 7.0.
Co może być przyczyną tego błędu i jak można to naprawić?

1

Od któregoś poziomu android musisz się pytać użytkownika.
I mieć w permission operację.

1

Tak jak wspomniał przedmówca: na tej stronie masz niemal wszystko opisane: https://developer.android.com/training/data-storage/files Warto zapoznać się z całością, Ciebie interesuje szczególnie część "Save a file on external storage".

0
lubie_programowac napisał(a):

Tak jak wspomniał przedmówca: na tej stronie masz niemal wszystko opisane: https://developer.android.com/training/data-storage/files Warto zapoznać się z całością, Ciebie interesuje szczególnie część "Save a file on external storage".

ok super zapoznałem się ze stroną i zrobiłem wszystko to co zostało tam opisane (dodałem <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> w manifest file)
, ale nadal mam błąd "Permission Danied" kod:

    public void createInvoice(View view) {
        // create a new document
        PdfDocument document = new PdfDocument();

        // crate a page description
        PdfDocument.PageInfo pageInfo =
                new PdfDocument.PageInfo.Builder(100, 100, 1).create();

        // start a page
        PdfDocument.Page page = document.startPage(pageInfo);

        Canvas canvas = page.getCanvas();

        Paint paint = new Paint();
        paint.setColor(Color.RED);

        canvas.drawCircle(50, 50, 30, paint);

        // finish the page
        document.finishPage(page);

        // Create Page 2
        pageInfo = new PdfDocument.PageInfo.Builder(500, 500, 2).create();
        page = document.startPage(pageInfo);
        canvas = page.getCanvas();
        paint = new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawCircle(200, 200, 100, paint);
        document.finishPage(page);

        // write the document content
        String targetPdf = "/sdcard/test.pdf";
        File filePath = new File(targetPdf);
        try {
            document.writeTo(new FileOutputStream(filePath));
            Toast.makeText(this, "Done", Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "Something wrong: " + e.toString(),
                    Toast.LENGTH_LONG).show();
        }

        // close the document
        document.close();
    }
1

Plik który chcesz utworzyć to String targetPdf = "/sdcard/test.pdf"; Android nie pozwala na bezpośredni dostęp do plików (ze względów bezpieczeństwa - nie chciałbyś chyba żeby każda aplikacja mogła odczytać plik z Twoimi smsami prawda?). Każdy dostęp trzeba zrealizować poprzez np File file = new File(context.getFilesDir(), filename); albo https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String). Wszystkie informacje są podane w linku który dodałem.

0
lubie_programowac napisał(a):

Plik który chcesz utworzyć to String targetPdf = "/sdcard/test.pdf"; Android nie pozwala na bezpośredni dostęp do plików (ze względów bezpieczeństwa - nie chciałbyś chyba żeby każda aplikacja mogła odczytać plik z Twoimi smsami prawda?). Każdy dostęp trzeba zrealizować poprzez np File file = new File(context.getFilesDir(), filename); albo https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String). Wszystkie informacje są podane w linku który dodałem.

super o to mi chodziło dziękuję za pomoc

0
lubie_programowac napisał(a):

Plik który chcesz utworzyć to String targetPdf = "/sdcard/test.pdf"; Android nie pozwala na bezpośredni dostęp do plików (ze względów bezpieczeństwa - nie chciałbyś chyba żeby każda aplikacja mogła odczytać plik z Twoimi smsami prawda?). Każdy dostęp trzeba zrealizować poprzez np File file = new File(context.getFilesDir(), filename); albo https://developer.android.com/reference/android/content/Context#getExternalFilesDir(java.lang.String). Wszystkie informacje są podane w linku który dodałem.

Że co? Do /sdcard ma dostęp każda aplikacja, o ile prawidłowo poprosi o uprawnienia zapisu pamięci wewnętrznej. Ograniczenia są tylko w dostępie do zewnętrznych nośników, jak zewnętrzna karta sd albo pamięć usb. Baza danych smsów nie jest w ogóle dostępna jako plik bez roota i jest przechowywana zupełnie gdzie indziej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1