获取APK文件的Uri
/**
* 根据文件路径生成Uri
*/
public Uri getUriFromFile(Context context, File file, String authority) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
// Android 7.0 以下
return Uri.fromFile(file);
} else {
// Android 7.0 及以上
return FileProvider.getUriForFile(context, authority, file);
}
}
安装APK文件
Android 8.0 及以上版本需要在清单文件中配置权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
/**
* 调用系统安装器(Intent)安装APK
* 注:addFlags NOT setFlags
*/
public void installApk(Context context, Uri uri) {
Intent intent = new Intent();
String mimeType = "application/vnd.android.package-archive";
intent.setAction(Intent.ACTION_INSTALL_PACKAGE); // Intent Action
intent.setDataAndType(uri, mimeType); // 设置文件的Uri和Mime Type
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 在新栈启动Activity
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 允许三方应用读文件
context.startActivity(intent);
}
网友评论