Android 自动更新

刺客伍六七
1 . 先导入包

库的链接 clickme

implementation 'com.allenliu.versionchecklib:library:2.0.8'

     测试是可以用的,谁知道引入到这个老项目有v4包的冲突,真是日了狗了,我又解决不了,只好再找了,用的这个:

  implementation "com.github.yjfnypeu:UpdatePlugin:3.1.0"  主要代码private void checkUpApp() {        //检查权限(NEED_PERMISSION)是否被授权 PackageManager.PERMISSION_GRANTED表示同意授权        if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)                != PackageManager.PERMISSION_GRANTED) {            //用户已经拒绝过一次,再次弹出权限申请对话框需要给用户一个解释            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission                    .WRITE_EXTERNAL_STORAGE)) {                Toast.makeText(this, "请开通相关权限,否则无法正常使用本应用!", Toast.LENGTH_SHORT).show();            }            //申请权限//            requestPermissions( new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 125);        } else {//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//                //先获取是否有安装未知来源应用的权限//                boolean   haveInstallPermission = getPackageManager().canRequestPackageInstalls();//                if (! haveInstallPermission){//                     Toast.makeText(this, "请开通安装未知来源的权限,否则无法APP可能无法正常使用!", Toast.LENGTH_SHORT).show();//                }////            }//                            Log.i("test-1","test----222224444");                    UpdateBuilder builder = UpdateBuilder.create(updateConfig());                    builder.setUpdateStrategy(new UpdateStrategy() {                        @Override                      //控制是否有更新显示提示,而不是什么都没有,在后台更新                        public boolean isShowUpdateDialog(Update update) {                            return true;                        }                        //控制是否显示进度条                        @Override                        public boolean isShowDownloadDialog() {                            return true;                        }                        @Override                        public boolean isAutoInstall() {                            return false;                        }                    }).check();//                }//            }        }    }    private UpdateConfig updateConfig(){      return   UpdateConfig.getConfig()                .setUrl("自己的服务器请求接口")                .setUpdateParser(new UpdateParser() {                    @Override                    public Update parse(String response) throws Exception {                        /* 此处根据上面url或者checkEntity设置的检查更新接口的返回数据response解析出                         * 一个update对象返回即可。更新启动时框架内部即可根据update对象的数据进行处理                         */                        JSONObject result = new JSONObject(response);                        Integer code = result.getInt("code");//                        Log.i("test-1","test----3333code:"+code);                        if (code == 1){//                            Log.i("test-1","test----55555:"+code);                            JSONObject object = result.getJSONObject("data");                            Integer version = object.optInt("version");                            Integer currentVersion =  VersionUtil.getVersionCode(MainTabActivity.this);                            Update update = new Update();                            // 此apk包的下载地址                            update.setUpdateUrl(object.optString("url"));                            // 此apk包的版本号                            update.setVersionCode(object.optInt("version"));                            // 此apk包的版本名称                            update.setVersionName(object.optString("name"));                            // 此apk包的更新内容                            update.setUpdateContent(object.optString("des"));                            // 此apk包是否为强制更新 根据后台返回 设置1代表强制更新                            Integer must = object.optInt("must");                            update.setForced(must == 1 ? true : false);                            // 是否显示忽略此次版本更新按钮                            update.setIgnore(object.optBoolean("ignore_able",false));//                           Log.i("test-1","999999"+version+"currentversion:"+currentVersion);                            return update;                        }else {//                            Log.i("test-1","test----4444:"+code);                            return null;                        }                    }                });    }
2 · 在 "AndroidManifest.xml" 中添加权限
            //下面的权限现在用的更新库可要可不要 vibrate 是震动的,wake_lock是和锁屏有关的            
3 · 小插曲
    3·1    由于用的本地的tomacat作为服务器测试, 所以要使用 http://10.0.2.2 ,而不是127.0.0.1,会提示端口被占用,貌似android会默认把这个认为是自己,不懂。    3·2    支持http    在res文件夹下新建一个xml文件      <?xml version="1.0" encoding="utf-8"?>                        之后在 "AndroidManifest.xml" 的
4 · 代码设置
AllenVersionChecker               .getInstance()               .requestVersion()               .setRequestUrl("http://10.0.2.2/update.json")               .request(new RequestVersionListener() {                   @Nullable                   @Override                   public UIData onRequestVersionSuccess(String result) {                       float id = (float)1.0;                       String name = "";                       float currentVersion =Float.parseFloat( Tools.getVersion(MainActivity.this));                       Log.e("current",String.valueOf(currentVersion<=0 ? "0" : currentVersion));                       Log.e("result:",result);                       //拿到服务器返回的数据,解析,拿到downloadUrl和一些其他的UI数据                       try {                           //新建jsonobject 对象 把json格式的字符串 传进来                           JSONObject jsonObject =new JSONObject(result);                           Integer code = jsonObject.getInt("code");                           //把除了头之外的内容读取出来 存为新的jsonobject 对象                           JSONObject personjsonObject=jsonObject.getJSONObject("data");                           //把数据中的id读取出来 赋值 给id                            id= (float) personjsonObject.getDouble("version");                           //把数据中的name读取出来 赋值 给name                           name=personjsonObject.getString("url");                           Toast.makeText(MainActivity.this,"code"+code+"version"+id,Toast.LENGTH_LONG).show();                           Log.e("result:","2222"+id+"url"+name);                       } catch (JSONException e) {                           e.printStackTrace();                       }                       Log.e("result:","11111");                       if (id > currentVersion){                           Toast.makeText(MainActivity.this,"new app",Toast.LENGTH_SHORT).show();                           //如果是最新版本直接return null                           UIData uiData = UIData                                   .create()                                   .setDownloadUrl(name)                                   .setTitle("亲,app更新了")                                   .setContent("添加文字");                           //放一些其他的UI参数,拿到后面自定义界面使用                           uiData.getVersionBundle().putString("key", "your value");                           return uiData;                       }else {                           Toast.makeText(MainActivity.this,"old app"+id,Toast.LENGTH_SHORT).show();                           //如果是最新版本直接return null                           return null;                       }                   }                   @Override                   public void onRequestVersionFailure(String message) {                       Log.e("TAG","error"+message);                       Toast.makeText(MainActivity.this,message,Toast.LENGTH_LONG).show();                   }               })               .excuteMission(this);   }

工具类

import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;public class Tools {    public static String getVersion(Context context) {        try {            PackageManager manager =context.getPackageManager();            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);            String version = info.versionName;            return version;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }}
5 · bug
如果出现更新成功后,界面和你的最新的版本的程序不一样,试下把你下载的安装包删了试下。

开心一刻


不怪我,怪凳子系列,老师们···

更多相关文章

  1. Android(安卓)studio 获取手机联系人和号码并输出
  2. 【Android(安卓)Debug】 Skipping insecure file ...
  3. android中的Json一
  4. Android(安卓)SQLite增删改查的语句
  5. Xamarin.Forms Android的本地数据库SQLite
  6. 使用ViewPager时,如何对view进行更新
  7. Android(安卓)应用更新使用Bugly
  8. android 中自动更新时间机制
  9. Android(安卓)listview多选模式ChoiceMode

随机推荐

  1. Android7.0 禁止锁屏状态的下拉状态栏
  2. 73、ImageView 让图片填充满
  3. 学习Android studio 日常总结
  4. Android的屏幕切换动画—左右滑动切换
  5. android网格布局
  6. android 流式布局 和 RadioGroup自动换行
  7. LCD驱动及Framebuffer相关
  8. Android中级篇之基于百度地图Android(安
  9. android的Touch事件解析(dispatchTouchEve
  10. Android 通过蓝牙控制小车源代码+视频