我的代码:
public static void installApk(Context context, File apkFile) {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context,
context.getApplicationContext().getPackageName() + ".provider", apkFile);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
} else {
uri = Uri.fromFile(apkFile);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
intent.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent);
}
apk文件路径:
/storage/emulated/0/Download/com.me.myapp-1.0.1.apk
获取Uri:
content://com.me.myapp.provider/publicDir/Download/com.me.myapp-1.0.1.apk
错误我没收到消息。
答案 0 :(得分:1)
由我的小忽略创建错误。
1 manifest中添加代码
<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/provider_paths"/>
</provider>
2 res / xml / provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="publicDir" path="/"/>
</paths>
3安装
public static void installApk(Context context, File apkFile) {
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", apkFile);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
uri = Uri.fromFile(apkFile);
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent);
}
你需要这个网址
https://developer.android.com/reference/android/os/FileUriExposedException.html
https://developer.android.com/reference/android/support/v4/content/FileProvider.html
代码解决我的问题。希望能帮到你