西湖美景三月天 春雨如酒柳如烟!
花个半小时写个版本更新,targetSdkVersion设置成24,最后下载完成准备安装的竟然弹出个"解析包错误",好吧,那么就去发现和解决问题。首先在7.0中 uri是不能直接暴露出来的,以下是7.0和小于7.0版本的处理方式:
if(Build.VERSION.SDK_INT>=24){
Intent intent =new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_DEFAULT);
Uri uri = FileProvider.getUriForFile(UpdateService.this, UpdateService.this.getApplicationContext().getPackageName() +".provider",file);
intent.setDataAndType(uri,"application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
}else{
Intent install =new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
startActivity(install);
}
在此要注意在版本高于7.0中,一定要添加
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);且一定要在intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);不然此临时权限则会被覆盖而失效。
再重新编译打包吧,发现不会出现“解析包错误”了。