http://blog.csdn.net/heikefangxian23/article/details/38582261
通過(guò)指定intent.setDataAndType(uri, "application/vnd.android.package-archive");
直接吊起installer intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
https://stackoverflow.com/questions/19825636/action-install-package
如果想監(jiān)聽(tīng)用戶是否升級(jí)(比如做強(qiáng)制升級(jí))
廣播是不奏效的肾胯,用startActivityForResult(intent)
此時(shí)吊起了安裝界面竖席,如果用戶點(diǎn)back,可認(rèn)為并沒(méi)有升級(jí)敬肚,你就可以在回調(diào)里去做事情了毕荐。
附上代碼
private void installApk() {
File saveFile = new File(getApkSavePath());
if (!saveFile.exists()) return;
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
uri = FileProvider.getUriForFile(ApplicationCache.getContext(), "com.xxxx.fileprovider", saveFile);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
uri = Uri.fromFile(saveFile);
}
// Service中啟動(dòng)的Activity需要顯示的設(shè)置Intent.FLAG_ACTIVITY_NEW_TASK
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// intent.setDataAndType(uri, "application/vnd.android.package-archive");
intent.setData(uri);
intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
if (isForceUpgrade) startActivityForResult(intent, 0x666);
else startActivity(intent);
}
//只有強(qiáng)制升級(jí)才調(diào)用startActivityForResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//如果進(jìn)入了該回調(diào)則認(rèn)為只是打開(kāi)了系統(tǒng)installer界面,但是點(diǎn)擊了返回艳馒,比較緩和的方案是給一個(gè)彈窗
//強(qiáng)制方案就是forceStop
if (requestCode == 0x666) showInstallDialog();
}