美文网首页
安卓的自动下载更新和安装

安卓的自动下载更新和安装

作者: 心中有梦丶身边有你 | 来源:发表于2019-01-11 15:25 被阅读0次

    之前做过有关安卓部分的下载和自动安装打开,忘记记录了,现在补上

    代码如下:

    public class MainActivity extends BaseActivity {
    
        public static MainActivity instance = null;
        public String mLocalVersionName = "";//定义当前的APP版本号
        private ProgressDialog mDialog;//下载更新的进度条提示框
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
          
                            try {
                                //获取软件版本号,对应AndroidManifest.xml下android:versionCode
                                mLocalVersionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
                            } catch (PackageManager.NameNotFoundException e) {
                                e.printStackTrace();
                            }
                            //这里是请求后台接口,获取服务器上传的APP版本号,然后调用checkversion方法,用本地的和后台的服务器版本做对比,如果版本不一样就提示更新
                            OkHttpUtils.post()
                                    .url(Constant.BASEURL)
                                    .addParams("type", "0")
                                    .build().execute(new StringCallback() {
                                @Override
                                public void onError(Request request, Exception e) { }
    
                                @Override
                                public void onResponse(String response) {
                                    UpdataSystem bean = new Gson().fromJson(response, UpdataSystem.class);
                                    checkVersion(bean.getExtend().getString());//传入后台的版本号,对比
                                }
                            });
        }
    
        public void checkVersion(String netVersionName) {
            if (!mLocalVersionName.equals(netVersionName)) {
                loadNewVersion();//发现新版本就更新
            } else {
            }
        }
    
        private void loadNewVersion() {
            final String url = Constant.Url + "pic/app/xxx.apk";//这里是链接文件的地址
            mDialog = new ProgressDialog(MainActivity.this);
            mDialog.setMax(100);
            mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mDialog.show();
            OkHttpUtils.get().url(url).build()
                    .execute(new FileCallBack(getExternalCacheDir().getAbsolutePath(), "app.apk") {
                        @Override
                        public void inProgress(float progress) {
                            //进度条的更新
                            mDialog.setProgress((int) (100 * progress));
                        }
                        @Override
                        public void onError(Request request, Exception e) { }
    
                        @Override
                        public void onResponse(File response) {
                            //下载完毕之后走这个方法,安装应用并自动打开
                            excutesucmd(String.valueOf(response));
                        }
                    });
        }
    
        protected void excutesucmd(String currenttempfilepath) {
            Process process = null;
            OutputStream out = null;
            InputStream in = null;
            try {
                // 请求root
                process = Runtime.getRuntime().exec("su");
                out = process.getOutputStream();
                // 调用安装
                out.write(("pm install -r " + currenttempfilepath + "\n").getBytes());
                in = process.getInputStream();
                int len = 0;
                byte[] bs = new byte[256];
                while (-1 != (len = in.read(bs))) {
                    String state = new String(bs, 0, len);
                    if (state.equals("success\n")) {
                        //安装成功后的操作
    
                        //静态注册自启动广播
                        Intent intent = new Intent();
                        //与清单文件的receiver的anction对应
                        intent.setAction("android.intent.action.PACKAGE_REPLACED");
                        //发送广播
                        sendBroadcast(intent);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (out != null) {
                        out.flush();
                        out.close();
                    }
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:安卓的自动下载更新和安装

          本文链接:https://www.haomeiwen.com/subject/xnntdqtx.html