android --APK下载、安装、启动

来源:互联网 发布:mac ftp下载工具 编辑:程序博客网 时间:2024/05/16 17:26

今天项目中使用到APK更新,同时实现自动安装(静默安装),安装完成后,启动最新安装的APK。

版本判断

请求服务器,判断版本,下载apk

下载APK

http.download(ApkUrl, "/sdcard/Download/" + fileName, true,
                new RequestCallBack<File>() {
                    @Override
                    public void onStart() {
                        LogUtils.d("conn...");
                    }

                    @Override
                    public void onLoading(long total, long current,
                            boolean isUploading) {
                        LogUtils.d("reply: " + current + "/" + total);

                    }

                    @Override
                    public void onFailure(HttpException error, String msg) {
                        mHandle.postDelayed(new splashhandler(), 300);
                        LogUtils.e(error.getExceptionCode() + ":" + msg);
                        error.printStackTrace();
                    }

                    @Override
                    public void onSuccess(ResponseInfo<File> arg0) {
                        LogUtils.d("LoadingActivity: down apk success");
                        // 安装apk
                        Intent installAPKIntent = DownloadAPKUtils.installAPK(
                                context, fileName);
                        startActivityForResult(installAPKIntent, 9001);
                    }
                });
    }


安装APK

Intent intent = new Intent(Intent.ACTION_VIEW);
        File file = new File("/sdcard/Download/", fileName);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(file),
                "application/vnd.android.package-archive");


启动APK

public static Intent openUpdateAPK(Context context, String packageName) {
        if (null == packageName)
            return null;
        PackageManager pm = context.getPackageManager();
        Intent mainTntent = new Intent(Intent.ACTION_MAIN, null);
        mainTntent.addCategory(Intent.CATEGORY_LAUNCHER);
        
        List<ResolveInfo> reesolveInfos = pm.queryIntentActivities(mainTntent,
                PackageManager.GET_INTENT_FILTERS);
        Collections.sort(reesolveInfos, new ResolveInfo.DisplayNameComparator(
                pm));
        for (ResolveInfo reInfo : reesolveInfos) {
            String activityName = reInfo.activityInfo.name;
            String pkgName = reInfo.activityInfo.packageName;
            String appLabel = (String) reInfo.loadLabel(pm);
            Intent launchIntent = new Intent();
            launchIntent.setComponent(new ComponentName(pkgName, activityName));
            return launchIntent;
        }
        return null;
    }


如有问题一起讨论!

0 0