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

本文介绍了在Android项目中实现APK自动更新、静默安装的详细步骤,包括检查版本、下载APK、安装APK以及安装后启动新版本应用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天项目中使用到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;
    }


如有问题一起讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值