android开发---- 实现自动更新安装再启动

本文详细介绍了如何在Android应用中实现自动更新功能。通过创建UpdateManager下载更新包,配置InstallReceiver广播接收器来监听安装成功事件,从而实现在后台静默更新并自动启动应用程序。

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

 纯干货,下面开始讲解

1.0 下载器,你需要一个下载器从服务器下载更新包:

调用方法:UpdateManager updateManager = new UpdateManager(context);

 updateManager.down("https://myclod-1259560102.cos.ap-nanjing.myqcloud.com/trainApp.apk")

"

public class UpdateManager {
    private Disposable downDisposable;
    private Context activity;

    private ProgressBar progressBar;
    private TextView textView4;
    private Button upgrade;
    private long downloadLength = 0;
    private long contentLength = 0;
    private String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    private String bigFilePath;

    public UpdateManager(Context context) {
        this.activity =  context;
    }

    public void test(String url) {
        down(url);
       // down("https://myclod-1259560102.cos.ap-nanjing.myqcloud.com/trainApp.apk");
    }
    public static Activity getCurrentActivity () {
        try {
            Class activityThreadClass = Class.forName("android.app.ActivityThread");
            Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(
                    null);
            Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
            activitiesField.setAccessible(true);
            Map activities = (Map) activitiesField.get(activityThread);
            for (Object activityRecord : activities.values()) {
                Class activityRecordClass = activityRecord.getClass();
                Field pausedField = activityRecordClass.getDeclaredField("paused");
                pausedField.setAccessible(true);
                if (!pausedField.getBoolean(activityRecord)) {
                    Field activityField = activityRecordClass.getDeclaredField("activity");
                    activityField.setAccessible(true);
                    Activity activity = (Activity) activityField.get(activityRecord);
                    return activity;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
    private void down(final String downloadUrl) {
        downApk(downloadUrl);
//        Observable.create(new ObservableOnSubscribe<Integer>() {
//                    @Override
//                    public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
//                        downApk(downloadUrl, emitter);
//                    }
//                }).subscribeOn(Schedulers.io())// 将被观察者切换到子线程
//                .observeOn(AndroidSchedulers.mainThread())// 将观察者切换到主线程
//                .subscribe(new Observer<Integer>() {
//
//                    @Override
//                    public void onSubscribe(Disposable d) {
//                        downDisposable = d;
//                    }
//
//                    @Override
//                    public void onNext(Integer result) {
//                        System.out.println("恶性" + result);
//                        //设置ProgressDialog 进度条进度
//                        // progressBar.setProgress(result);
//                        //  textView4.setText(result+"%");
//                    }
//
//                    @Override
//                    public void onError(Throwable e) {
//                      //  Toast.makeText(activity.getApplication(), "网络异常!请重新下载!", Toast.LENGTH_SHORT).show();
//                        //upgrade.setEnabled(true);
//                    }
//
//                    @Override
//                    public void onComplete() {
//                        //  upgrade.setEnabled(true);
//     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值