- 首先常見(jiàn)做法下載設(shè)置存放路徑
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// 獲得存儲(chǔ)卡的路徑
String sdpath = Environment.getExternalStorageDirectory()
+ "/";
mSavePath = sdpath + "download";
} else {
//內(nèi)部存儲(chǔ)
mSavePath = "/data/data/" + context.getPackageName() + "/files";
}
2.下載完成進(jìn)行安裝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);//添加這一句表示對(duì)目標(biāo)應(yīng)用臨時(shí)授權(quán)該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);
}
}
似乎沒(méi)問(wèn)題穆端,假如手機(jī)是沒(méi)有sd卡锐膜,比如我測(cè)試的一款三星Note4,存儲(chǔ)在內(nèi)部data/data/包名底下加派,一切就不是那樣了铸豁,直接就
意不意外慷荔,刺不刺激。
3.解決辦法
原來(lái)是內(nèi)部存儲(chǔ) 文件沒(méi)有執(zhí)行權(quán)限所以需要添加權(quán)限
String cmd = "chmod 777 " + file.toString();
try {
Runtime.getRuntime().exec(cmd);
} catch (Exception e) {
e.printStackTrace();
}
這樣就有權(quán)限了
(PS:假如還是出現(xiàn)解析失敗口柳,那么請(qǐng)嘗試如下修改)
install.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive");
修改下uri方式