ERR_UNKNOWN_URL_SCHEME при загрузке текстового файла с помощью файлового провайдера

Поставщик в файле manifest.xml

<!-- File Provider -->
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.test.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

Исходный файл

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

Использование поставщика файлов

Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "*/*");
intent.startActivity(intent);

Ссылка: здесь

Описание : я не могу открыть изображение, текстовый файл, PDF с помощью этого поставщика файлов. Когда я открываю текстовый файл файла, он дает мне ERR_UNKNOWN_URL_SCHEME. Если я открою изображение или pdf, ничего не покажет


person Sumit Bhatt    schedule 23.01.2017    source источник
comment
Пожалуйста, сообщите значение uri.toString().   -  person greenapps    schedule 23.01.2017
comment
И файл.getAbsolutePath().   -  person greenapps    schedule 23.01.2017
comment
/storage/emulated/0/KOOPSv3Sales/KOOPSv3Sales Приложение к сообщению/29ca8aed.txt   -  person Sumit Bhatt    schedule 23.01.2017
comment
content://com.example.test.fileprovider/external_files/KOOPSv3Sales/KOOPSv3Sales Приложение к сообщению/29ca8aed.txt не может быть загружено, поскольку ERR_UNKNOWN_URL_SCHEME   -  person Sumit Bhatt    schedule 23.01.2017
comment
Можете ли вы открыть файл самостоятельно с помощью getContentResolver().openInputStream(uri)? И file.exists() возвращает true?   -  person greenapps    schedule 23.01.2017
comment
When i open the file text file. Неясно. Вы не открываете его, я думаю. Ни ваше приложение. Но приложение пользователь выбирает из списка. Итак, сообщение из этого приложения. Попробуйте другие приложения. Возможно, выбранное вами приложение не знает о схемах content://.   -  person greenapps    schedule 23.01.2017
comment
`Если я открою изображение или pdf, ничего не покажет`. Вы должны упомянуть приложения, которые выбрал пользователь. И версия для Андроид.   -  person greenapps    schedule 23.01.2017
comment
Ок, я проверю на другом устройстве   -  person Sumit Bhatt    schedule 23.01.2017


Ответы (1)


Вам нужно добавить флаг «FLAG_GRANT_READ_URI_PERMISSION» к вашему намерению:

Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".fileprovider", file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "*/*");
intent.addFlags(FLAG_GRANT_READ_URI_PERMISSION);
intent.startActivity(intent);

https://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION

FLAG_GRANT_READ_URI_PERMISSION Если установлено, получателю этого Intent будет предоставлено разрешение на выполнение операций чтения URI в данных Intent и любых URI, указанных в его ClipData. При применении к ClipData Intent будут предоставлены все URI, а также рекурсивный обход данных или других ClipData в элементах Intent; используются только флаги предоставления Intent верхнего уровня.

person Aldasa    schedule 19.01.2018
comment
Хорошо, это решило это в моем случае. Это странно, так как я думал, что grantUriPermissions в манифесте для провайдера будет достаточно. - person Peterdk; 14.05.2019