我很难打开下载的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/
我在做什么:
SinronizacaoActivity.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>
filepaths.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
...
你能帮我吗
path="/trovata/update/${applicationId}/"
${applicationId}
只会在AndroidManifest.xml
中变成您的应用程序ID。不能在资源文件中使用清单占位符。因此,用实际的应用程序ID替换${applicationId}
。
在所有遇到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>
试试看。