Android 下載APP完成後,開啟APP完成安裝。
阿新 • • 發佈:2018-11-23
業務邏輯:在工作種遇到這種需求,就是開啟第三APP。
但是這個時候要確保這個APP有沒有在本地TV上。所以,就要 檢測有沒安裝,沒有安裝就下載安裝。
1,檢測 APP 是否安裝。
/**
* 檢測 APP是否已安裝。
*
* @param context 當前上下文
* @param packageName 包名
* @return
*/
public static boolean isAvilible(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0 );
List<String> packageNames = new ArrayList<String>();
if (packageInfos != null) {
for (int i = 0; i < packageInfos.size(); i++) {
String packName = packageInfos.get(i).packageName;
packageNames.add(packName);
}
}
// 判斷packageNames中是否有目標程式的包名,有TRUE,沒有FALSE
return packageNames.contains(packageName);
}
2,
if (true != isInstallAPP) {//沒有就下載
downLoadApp(‘你的下載路徑’, ‘APP的名字’ + ".apk");
} else {
//有的話就直接開啟
PackageManager packageManager = getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(games.get (position).getPackageName()); //com.xx.xx是我們獲取到的包名
startActivity(intent);
}
3,下載的程式碼。這裡用的是OKGO框架。
/**
* APP下載
*
* @param url 下載路徑
* @param fileName APP名字
*/
public void downLoadApp(String url, final String fileName) {
OkGo.<File>get(url)
.tag(this)
.execute(new FileCallback(fileName) {
@Override
public void onStart(Request<File, ? extends Request> request) {
super.onStart(request);
Log.e("downloadProgress: ", "NONE" + Progress.NONE);
showDialog();
}
@Override
public void onSuccess(Response<File> response) {//sdcard/download/ 預設下載路徑
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(
Uri.fromFile(new File("/mnt/sdcard/Download/" + fileName)),
"application/vnd.android.package-archive");
Log.e("包路徑---", "/mnt/sdcard/Download/" + fileName);
hud.dismiss();
startActivity(intent);//下載完後 啟動應用。
}
@Override
public void downloadProgress(Progress progress) {
super.downloadProgress(progress);
// dialog.setPRo((int) progress.fraction);
}
@Override
public void onFinish() {
super.onFinish();
}
});
}
記個筆記,防止忘記。