Otwieram plik PDF za pomocą zewnętrznej aplikacji przeglądarki PDF. Ale w Androidzie 11 przedstawia kwestię pozwolenie na pozwolenie EOCCS. Wszystkie uprawnienia już zadeklarowane w moim manifestowym pliku.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        

Zgłoszono również to:

Android: requestLegacyExternalStorage = "true"

Tworzenie i zapisanie treści z poniższym kodem:

byte [] decodedContent = Base64.decode(base64.getBytes(), Base64.DEFAULT);

                try {

                    File pdfDirPath = new File(getApplicationContext().getExternalFilesDir(null).getAbsolutePath(), "pdfs");
                    File file5 = new File(pdfDirPath, globalData.getVin()+".pdf");

                    if (!file5.exists()) {

                        file5.getParentFile().mkdirs();
                    }

                    outputStream = new FileOutputStream(file5);
                    outputStream.write(Base64.decode(base64, Base64.NO_WRAP));
                    outputStream.close();
               

I otwarty powyżej pliku:

    Uri   path = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".helper.ProviderClass", file5);
  intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(path, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Proszę, pomóż mi z tym.

1
Malhotra 25 luty 2021, 20:22

1 odpowiedź

Najlepsza odpowiedź

Dwa punkty.

  1. Android: RequestleygacyExternalstorage = "True" jest ignorowany na Androidzie 11. Ta wersja Androida wymusza do przechowywania z systemem Android niezależnie od tej flagi w swoim manifestie, więc możesz bezpiecznie wyjmować, ponieważ nie ma wpływu na urządzenie.
  2. Ponieważ wymuszone jest przechowywanie zasilania, aplikacje nie mogą uzyskać dostępu do prywatnych lokalizacji aplikacji innych aplikacji. W twoim przypadku zapisujesz swój plik w GetApplicationContext (). GetExternFilesDir (Null) .getabsolutepath (), która jest prywatną lokalizacją aplikacji. Zasady przechowywania z systemem Android 11 zabronią zewnętrznej aplikacji przeglądarki PDF, aby otworzyć dowolny plik w lokalizacji aplikacji. Na Androida 11 Jeśli chcesz, aby inna aplikacja otworzyła doc, którą stworzyła Twoją aplikację, masz co najmniej dwa wybory i może być więcej.

A) skomplikowany. Użyj plikuProvider https://developer.Android.com/reference/androidx/core/ Zawartość / fileProvider

B) Ten jest znacznie prostszy. Od czasu zamiarem jest udostępnienie tego pliku z inną aplikacją, zamiast pisać do określonego katalogu aplikacji, powinieneś użyć Mediastore API i napisz go do mediastore.downloads.external_content_uri. Istnieje wiele dobrych przykładów w sieci, jak to zrobić, na przykład Jak zapisać PDF w zakresie przechowywania zasobów? Twój przeglądarka PDF nie ma problemu z dostępem do tego.

0
shasia858 7 marzec 2021, 03:58