1. 程式人生 > >android 7.0之後安裝apk

android 7.0之後安裝apk

android 7.0行為變更中系統許可權的更改裡面提到:

傳遞軟體包網域外的 file:// URI 可能給接收器留下無法訪問的路徑。因此,嘗試傳遞 file:// URI 會觸發 FileUriExposedException。分享私有檔案內容的推薦方法是使用 。

所以我們在安裝apk的時候不能全部使用setDataAndType了,在7.0之後的系統要使用FileProvider

private void installApk(File apkFile){
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N) {//判讀版本是否在7.0以上
String providerName = Constant.getPackageInfo
().packageName == null ? "com.iflytek.mea.vbgvideo.fileprovider" : Constant.getPackageInfo().packageName + ".fileprovider"; Uri apkUri = FileProvider.getUriForFile(context, providerName, apkFile); Intent install = new Intent(Intent.ACTION_VIEW); install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
); install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); install.setDataAndType(apkUri, "application/vnd.android.package-archive"); context.startActivity(install); } else{ Intent install = new Intent(Intent.ACTION_VIEW); install.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"
); install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(install); } }