Android: Использование поставщика файлов на ExternalStorage - PullRequest
1 голос
/ 08 мая 2020

Мне очень трудно открыть загруженный apk

Я пытаюсь использовать FileProvider (https://developer.android.com/reference/android/support/v4/content/FileProvider), я выполнил эти шаги, но думаю, что что-то делаю не так. Я меняю этот код по-разному много раз, но безуспешно.

Вот что у меня:

Файл загружен в:

app.setPathUpdate(Environment.getExternalStorageDirectory() + 
                           File.separator + "trovata/update/" +
                           this.getApplicationInfo().packageName + File.separator)

Приведенный выше код дает такой результат: /storage/emulated/0/trovata/update/br.com.trovata.milano.elite/

Вот что я делаю:

SincronizacaoActivity. java

File FileAppInst = new File(app.getPathUpdate() + "atualizador");
Uri apkUri = FileProvider.getUriForFile(this, BuildConfig.APPLICATION_ID+".provider", FileAppInst);
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData(apkUri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);

AndroidManifest. xml

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

пути к файлам. xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="atualizador" path="/trovata/update/${applicationId}/"/>
</paths>

Ошибка:

...
Caused by: java.lang.IllegalArgumentException: Failed to find configured 
root that contains /storage/emulated/0/trovata/update/br.com.trovata.milano.elite/atualizador
...

Не могли бы вы мне помочь ?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Во всех встречах с FileProvider обнаруживается, что в большинстве случаев он работал только тогда, когда путь был установлен на path=".".

Замените ваш filepaths.xml на этот

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

И попробуйте.

0 голосов
/ 08 мая 2020
path="/trovata/update/${applicationId}/"

${applicationId} превращается только в идентификатор вашего приложения в AndroidManifest.xml. Вы не можете использовать заполнители манифеста в файлах ресурсов. Итак, замените ${applicationId} фактическим идентификатором приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...