1.网上找了一些,不是不好用,就是差点东西...所以自己做了一个可用的,以后备用


首先先看代码吧,直接复制就可以使用


在一个按钮事件中,写入一个方法来检查版本


checkVersion();


private void checkVersion() { Ba().showDialog(this, "正在检查版本..."); //获取service_ip //String server_ip = "http://172.19.128.53:8080"; //这里是从配置文件中获取的服务器的地址,你可以删除根据自己的写 String server_ip = Ge("server_ip"); String hostUrl = server_ip + "/api/mdd/appVersion/selectVersion"; //如果第一次安装没有配置文件需要进入配置界面配置 if ("".equals(server_ip) || server_ip == null || "noFile".equals(server_ip)) { //这里如果获取不到配置文件中的地址,就走到设置页面去设置 //系统未设置 走到设置端 startActivity(new intent(mContext, CommonSe)); return; } String versionCode = null; try { versionCode = (). getPackageInfo(), 0).versionName; } catch e) { e.printStackTrace(); } //这里一定要注意,这里获取的是build.gradle中的那个versionnum的值. //请求参数 HashMap<String, String> param = new HashMap<String, String>(); ("version", versionCode);//1.这个是本地存储的版本号 ("apptype", "0");//0是安卓 //1是苹果 hostUrl = H(hostUrl, param); Type type = new TypeToken<CommonResult<VersionInfo>>() { }.getType(); // HashMap<String, String> header = new HashMap<String, String>(); // ("Authorization", "Bearer " + Ba().getToken()); //这里根据需要看,后台需不需要验证,需不需要添加token验证. OkHttprequest<CommonResult<VersionInfo>> request1 = new OkHttpRequest<CommonResult<VersionInfo>>("POST", hostUrl, null, null, null, type, new OkH;CommonResult<VersionInfo>>() { @Override public void callBack(CommonResult<VersionInfo> result) { //返回请求结果 Ba().closeDialog();//这个是弹出的蒙版框,这个之前有博文写过 if () != 200) { //1.这里如果系统启动,请求版本检测失败就退出系统 //if () != 200 || re() == null) { Toa, "系统错误,请稍后再试", Toa).show(); finish(); //这里可以添加 Sy(0)退出系统 return; //返回就可以了,不继续处理 } final VersionInfo versionInfo = re(); if (versionInfo == null) { //2.如果系统没有返回信息,表示没有新版本 Toa, "当前已是最新版本!", Toa).show(); //如果没有新版本就可以进入系统了,这里根据自己需要打开自己的系统. return; } //1.除了系统出错,以及是最新版本以外,正常返回以后,弹出确认是否更新到最新版本弹框. final Aler normalDialog = new Aler); normalDialog.setTitle("提醒"); normalDialog.setMessage("是否更新到最新版本?"); normalDialog.setPositiveButton("确定", new DialogIn() { @Override public void onClick(DialogInterface dialog, int which) { //2.如果用户点击确认更新到最新版本,就调用更新版本方法 //把返回的新版本信息,传到uploadVersion中去 uploadVersion(versionInfo); } }); normalDialog.setNegativeButton("取消", new DialogIn() { @Override public void onClick(DialogInterface dialog, int which) { //当用户点击取消去判断该版本是否是强制更新版本 //如果用户点击取消,这里做的是这样,先判断该版本是否需要强制升级 //如果需要强制升级,那么系统退出不让用户使用了,如果非强制升级 //就进入系统让用户继续使用. i(re().getForcea())) && re().getForcea() == 1){ //这里根据返回的信息,看看是否该版本需要强制安装 //强制更新 不允许进入系统 finish(); Sy(0);//强制更新,选择了取消,可以退出系统. }else{ //不是强制更新 取消 进入原来版本系统 //这里如果用户点击了取消,并且该版本不是强制更新版本,就 //允许用户进入之前版本系统,根据自己需求写 finish(); } } }); // 显示 normalDialog.show(); } }, new OkH() { @Override public void errorBack(String msg) { Ba().closeDialog(); Toa, "服务暂时不可用:"+msg, Toa).show(); Toa, "请检查服务配置", Toa).show(); startActivity(new Intent(mContext, CommonSe)); finish(); //关闭当前程序 //如果服务不可用,有可能是访问后台访问不到,这个时候可以,打开设置页面,去 //配置后台地址.等配置 // } }); reque(); }



2.然后再看下一个方法uploadVersion


private void uploadVersion(VersionInfo versionInfo) { //1.首先去下载安装包,安装包的地址在,请求后台,返回的内容里 //Ba().showDialog(this, "正在安装,请稍等。。"); Ba().showDialog(this, "正在下载安装包.."); //2.这里相当于给安装重新命名 String imgNameOri = "ydy_" + ver(); //3.可以看到这里把安装包,放到了安装目录的/ydy_store的文件夹中去了 String filesDir = Ba().getExternalfilesDir( Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/ydy_store"; File pictureDirOri = new File(filesDir); if (!()) { (); } //1.这种方式安装以后会把安装包删除掉 try { final File file = File.createTempFile( imgNameOri, /* prefix */ ".apk", /* suffix */ pictureDirOri /* directory */ ); + ver() //2.这里是获取fastdfs的服务器地址,apk安装包是放到fastdfs上的. String img_ip = Ge("img_ip"); String hostUrl = img_ip + "/"+ ver(); //3.获取安装包地址,然后通过okhttp,发送请求获取下载. OkHttpRequest<String> request = new OkHttpRequest<String>("POST", hostUrl, null, null, null, S, new OkH;String>() { //OkHttpRequest<String> request = new OkHttpRequest<String>("POST", DeviceFinal.FILE_SERVICE + ver(), null, null, null, S, new OkH;String>() { @Override public void callBack(String filePath) { Ba().closeDialog(); //1.这里等待安装包下载成功以后,然后开始执行installAPK安装 Toa, "下载成功!开始安装..", Toa).show(); installAPK(file); } }, new OkH() { @Override public void errorBack(String msg) { Toa, "版本文件下载失败,请稍后再试", Toa).show(); finish(); Sy(0);//如果出错以后就退出系统 } }); reque(file); } catch (IOException e) { e.printStackTrace(); } }



3.下载以后,就开始安装apk文件,执行installAPK方法


private void installAPK(File savedFile) { //1.传入下载的文件 这里要注意,启动的intent这里是一个动作 //打开安装界面的动作,不是启动一个activity Intent intent = new Intent(); in); in); //2.这里需要做判断如果sdk的版本大于24的话,那么共享文件就不能用 //file:// 直接获取了需要用到FileProvider 共享文件,这个需要做一些配置后面说 if >= Build.VERSION_CODES.N) { in); Uri uri = FileProvider.getUriForFile(this, "com.baidu.idl.;, savedFile); in(uri, "application;); } else { //3.如果系统sdk,小于24 就可以直接获取文件就可以了. in(savedFile), "application;); } //3.启动安装程序 startActivity(intent); Ba().closeDialog(); finish(); //结束当前程序安装新版本程序 Sy(0);//安装以后结束程序,重新启动打开新程序 }



4.这个过程中,需要,首先,添加权限,这个必须要在:app\src\main\AndroidMani添加


否则不报错,也不显示有问题不好查原因,但就是不能用,不会弹出安装界面


<!-- 安装权限--> <uses-permission android:name="android.; />



5.然后代码中用到的FileProvider配置,也有一篇文章是说FileProvider怎么用的,这里再提一下吧


先找到自己的applicationid 在build.gradle中:




然后在app\src\main\AndroidMani文件中:


<provider android:name="androidx.core.con; android:authorities="com.baidu.idl.;//这里就是applicationid+fileprovider android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.; android:resource="@xml/update_file_paths" /> </provider>



添加上配置


然后再创建xml文件夹,然后创建xml文件:app\src\main\res\xml\u


<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android=";> <external-path name="external_path" path="." /> </paths>



这样就可以了.


1.《关于安卓系统app怎么更新,你需要知道这些安卓原生开发_apk在线升级_实现安装未知来源应用_亲测可用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《关于安卓系统app怎么更新,你需要知道这些安卓原生开发_apk在线升级_实现安装未知来源应用_亲测可用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/3065565.html