1

我很难打开下载的 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
...

你可以帮帮我吗?

4

2 回答 2

0

在与它的所有遭遇中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>

试一试。

于 2020-05-08T18:41:53.923 回答
0
path="/trovata/update/${applicationId}/"

${applicationId}只会变成你的应用程序 ID AndroidManifest.xml。您不能在资源文件中使用清单占位符。因此,请替换${applicationId}为您的实际应用程序 ID。

于 2020-05-08T17:43:15.900 回答