Как открыть файл PDF с помощью стороннего приложения (намерение, URL) - PullRequest
0 голосов
/ 06 октября 2019
       int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
    } else {
        File file = new File("/sdcard/reportSituationAddress.pdf");
        if (file.exists()) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            Uri uri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID + ".provider" ,file);
            intent.setDataAndType(uri, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try {
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(Pdftest.this, "No Application available to view pdf", Toast.LENGTH_LONG).show();
            }
        } else {
            Toast.makeText(Pdftest.this, "not found", Toast.LENGTH_LONG).show();
        }

У меня есть PDF-файл, мне нужно открыть его одним нажатием кнопки. Чтобы пользователь после нажатия мог выбрать приложение для открытия файла, и тогда файл откроется в нем. Я пользуюсь провайдером, но постоянно получаю ошибки. Пожалуйста, помогите решить проблему.

Это мой файл-провайдер

    <?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Android/data/telros.brigade/files/Pictures" />
    <external-files-path name="name" path="AisBrigade/Pdf" />
</paths>

Это мой манифест

<provider
            android:name="androidx.work.impl.WorkManagerInitializer"
            android:authorities="ru.npobaltros.aisbrigade.mapsdk.storage.workmanager-init_new"
            android:enabled="false"
            android:exported="false"
            tools:replace="android:authorities" />
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="telros.brigade"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

Это должно быть так, только программы открывают PDF. введите описание изображения здесь

Мои ошибки введите описание изображения здесь

Возможно, у кого-то есть фрагмент рабочего кода, где он реализован, если это такПожалуйста, покажите

1 Ответ

0 голосов
/ 06 октября 2019

У вас нет записи в ваших FileProvider метаданных, которая покрывает выбранный вами путь.

Во-первых, остановите пути жесткого кодирования. Используйте методы, чтобы собрать путь из корневого местоположения. Я предполагаю, что вы думаете, что ваш PDF находится в корне внешнего хранилища . В этом случае вы должны использовать:

File file = new File(Environment.getExternalStorageDirectory(), "reportSituationAddress.pdf");

Затем убедитесь, что ваши метаданные FileProvider поддерживают ваше корневое местоположение. Для Environment.getExternalStorageDirectory(), используйте <external-path>.

Также обратите внимание, что у вас очень мало доступа к файловой системе на Android 10 и выше . Например, Environment.getExternalStorageDirectory() устарела на Android 10, так как по умолчанию у вас нет к нему доступа.

...