Android 下载APP完成后,打开APP完成安装。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26841579/article/details/80309603

业务逻辑:在工作种遇到这种需求,就是打开第三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();

                    }
                });
    }

记个笔记,防止忘记。

猜你喜欢

转载自blog.csdn.net/qq_26841579/article/details/80309603
今日推荐