- 首先常见做法下载设置存放路径
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 获得存储卡的路径
String sdpath = Environment.getExternalStorageDirectory()
+ "/";
mSavePath = sdpath + "download";
} else {
//内部存储
mSavePath = "/data/data/" + context.getPackageName() + "/files";
}
2.下载完成进行安装APK
Intent i = new Intent(Intent.ACTION_VIEW);
if (file != null && file.length() > 0 && file.exists() && file.isFile()) {
if (Build.VERSION.SDK_INT >= 24) {//判读版本是否在7.0以上
Uri apkUri = FileProvider.getUriForFile(UpDateActivity.this, "com.quanzhichuxing.renter.fileprovider", file);//在AndroidManifest中的android:authorities值
Intent install = new Intent(Intent.ACTION_VIEW);
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
install.setDataAndType(apkUri, "application/vnd.android.package-archive");
startActivity(install);
} else {
Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(install);
}
}
似乎没问题,假如手机是没有sd卡,比如我测试的一款三星Note4,存储在内部data/data/包名底下,一切就不是那样了,直接就
意不意外,刺不刺激。
3.解决办法
原来是内部存储 文件没有执行权限所以需要添加权限
String cmd = "chmod 777 " + file.toString();
try {
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
e.printStackTrace();
}
这样就有权限了
(PS:假如还是出现解析失败,那么请尝试如下修改)
install.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive");
修改下uri方式