1. 程式人生 > >Android 下載APP完成後,開啟APP完成安裝。

Android 下載APP完成後,開啟APP完成安裝。

業務邏輯:在工作種遇到這種需求,就是開啟第三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();

                    }
                });
    }

記個筆記,防止忘記。