android.os.FileUriExposedException: файл: ///storage/emulated/0/test.txt, доступный за пределами приложения через Intent.getData ()

if ("string") {
    console.log('true!');
}

Как вы уже знаете, если оценивает логическое выражение. Поэтому он проверяет

if((Boolean)"string")

Так как строка (bool) истинна, она проходит. Но в случае

if ("string"==true) {
    console.log('true!');
}

Вы пытаетесь приравнять строку с bool, которая, очевидно, сравнивает их и возвращает false.

638
задан Thomas Vos 2 February 2018 в 17:32
поделиться

3 ответа

@palash k ответ правильный и работал для файлов внутреннего хранилища, но в моем случае я хочу открыть файлы и из внешнего хранилища, мое приложение зависало при открытии файла из внешнего хранилища, такого как sdcard и usb, но мне удается решить исправить ошибку путем изменения provider_paths.xml из принятого ответа

изменить provider_paths.xml , как показано ниже

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

<external-path path="Android/data/${applicationId}/" name="files_root" />

<root-path
    name="root"
    path="/" />

</paths>

и в классе java (Нет изменить в качестве принятого ответа просто небольшую правку)

Uri uri=FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID+".provider", File)

Это поможет мне исправить сбой файлов из внешних хранилищ. Надеюсь, это поможет кому-то, имеющему ту же проблему, что и моя :):

25
ответ дан Vini.g.fer 2 February 2018 в 17:32
поделиться

Здесь мое решение:

в [1 111] Manifest.xml

<application
            android:name=".main.MainApp"
            android:allowBackup="true"
            android:icon="@drawable/ic_app"
            android:label="@string/application_name"
            android:logo="@drawable/ic_app_logo"
            android:theme="@style/MainAppBaseTheme">

        <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:exported="false"
                android:grantUriPermissions="true">
            <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths"/>
        </provider>

в [1 112] res/xml/provider_paths.xml

   <?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 myPhotoFileUri = FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".provider", myPhotoFile);               
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, myPhotoFileUri);

Рўhat все Вам нужно.

Также не нужно для создания

public class GenericFileProvider extends FileProvider {}

, я тестирую на Android 5.0, 6.0 и Android 9.0, и это - работа успеха.

4
ответ дан Alex 4 November 2019 в 07:20
поделиться
  • 1
    @James - Вы уверены в этом? Посмотрите пример в моем комментарии выше. Пример в Вашем комментарии определенно не был бы === с тех пор you' ре, на самом деле создающее 3 абсолютно уникальных объекта. – user113716 10 November 2010 в 00:30

Просто позвольте ему проигнорировать Воздействие URI... Добавьте его после того, как на создадут

StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); 
-1
ответ дан 22 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: