基于 https://github.com/WVector/AppUpdate 版本更新
#自定义接口协议+自定义对话框+显示进度对话框
废话不多说先上图在上代码! !!! 代码写的有点…希望大神们帮忙改正感激不尽

private void diyUpdate() {String path = Environment.getExternalStorageDirectory().getAbsolutePath();new UpdateAppManager.Builder()//必须设置,当前Activity.setActivity(this)//必须设置,实现httpManager接口的对象.setHttpManager(new OkGoUpdateHttpUtil())//必须设置,更新地址.setUpdateUrl(Constant.BASEURL + "api/versions?type=android").setTargetPath(path).build()//检测是否有新版本.checkNewApp(new UpdateCallback() {/*** 解析json,自定义协议** @param json 服务器返回的json* @return UpdateAppBean*/@Overrideprotected UpdateAppBean parseJson(String json) {UpdateAppBean updateAppBean = new UpdateAppBean();String content = mUpdatebean.getData().getContent();String newversion = mUpdatebean.getData().getNewversion();String downloadurl = mUpdatebean.getData().getDownloadurl();String packagesize = mUpdatebean.getData().getPackagesize();boolean enforce = mUpdatebean.getData().isEnforce();updateAppBean//(必须)是否更新Yes,No.setUpdate("Yes")//(必须)新版本号,.setNewVersion(newversion)//(必须)下载地址.setApkFileUrl(downloadurl)//(必须)更新内容.setUpdateLog(content)//大小,不设置不显示大小,可以不设置.setTargetSize(packagesize)//是否强制更新,可以不设置.setConstraint(enforce);//设置md5,可以不设置// .setNewMd5(jsonObject.optString("new_md5"));return updateAppBean;}/*** 有新版本** @param updateApps        新版本信息* @param updateAppManagers app更新管理器*/@Overridepublic void hasNewApp(UpdateAppBean updateApps, UpdateAppManager updateAppManagers) {updateAppManager = updateAppManagers;isShow = false;diaLog();}/*** 网络请求之前*/@Overridepublic void onBefore() {showDialog(true);}/*** 网路请求之后*/@Overridepublic void onAfter() {showDialog(false);}/*** 没有新版本*/@Overridepublic void noNewApp(String error) {Toast.makeText(UpdateAppActivity.this, "没有新版本", Toast.LENGTH_SHORT).show();}});}
  private void diaLog() {String newversion = mUpdatebean.getData().getNewversion();String content = mUpdatebean.getData().getContent();boolean enforce = mUpdatebean.getData().isEnforce();mCustomDialog = new CustomDialog(UpdateAppActivity.this, enforce, updateAppManager);mCustomDialog.setTitle(newversion);mCustomDialog.setMessage(content);if (isShow) {mCustomDialog.downloadApp(RxTool.getContext());}mCustomDialog.setCancelable(false);//点击物理按键是否会消失mCustomDialog.show();}
   public class CustomDialog extends Dialog {private Button btn_ok;private TextView tv_cancel;private TextView tv_title;private TextView tv_update_info;private boolean isShow;private String title;private String message;private NumberProgressBar mNumberProgressBar;private UpdateAppManager updateAppManager;//设置标题public void setTitle(String title) {this.title = title;}//设置更新内容public void setMessage(String message) {this.message = message;}//下载apppublic void downloadApp(Context context) {updateAppManager.download(new DownloadService.DownloadCallback() {@Overridepublic void onStart() {//                    HProgressDialogUtils.showHorizontalProgressDialog(context, "下载进度", false);}/*** 进度** @param progress  进度 0.00 -1.00 ,总大小* @param totalSize 总大小 单位B*/@Overridepublic void onProgress(float progress, long totalSize) {btn_ok.setVisibility(View.GONE);tv_cancel.setVisibility(View.GONE);mNumberProgressBar.setVisibility(View.VISIBLE);mNumberProgressBar.setProgress(Math.round(progress * 100));mNumberProgressBar.setMax(100);}/**** @param totalSize 总大小 单位B*/@Overridepublic void setMax(long totalSize) {}/*** 下载完了* @param file 下载的app* @return true :下载完自动跳到安装界面,false:则不进行安装*/@Overridepublic boolean onFinish(File file) {HProgressDialogUtils.cancel();mCustomDialog.dismiss();return true;}@Overridepublic void onError(String msg) {Toast.makeText(UpdateAppActivity.this, msg, Toast.LENGTH_SHORT).show();HProgressDialogUtils.cancel();}@Overridepublic boolean onInstallAppAndAppOnForeground(File file) {return false;}});}//    //CustomDialog类的构造方法public CustomDialog(@NonNull Context context, boolean isShows, UpdateAppManager updateAppManager) {super(context, R.style.UpdateAppDialog);this.isShow = isShows;this.updateAppManager = updateAppManager;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//为了锁定app界面的东西是来自哪个xml文件setContentView(R.layout.custom_dialog);btn_ok = findViewById(R.id.btn_ok);tv_cancel = findViewById(R.id.tv_cancel);tv_title = findViewById(R.id.tv_title);tv_update_info = findViewById(R.id.tv_update_info);mNumberProgressBar = findViewById(R.id.npb);tv_title.setText(String.format("是否升级到%s版本?", title));tv_update_info.setText(message);if (isShow) {tv_cancel.setVisibility(View.VISIBLE);} else {tv_cancel.setVisibility(View.GONE);}//为两个按钮添加点击事件btn_ok.setOnClickListener(UpdateAppActivity.this);tv_cancel.setOnClickListener(UpdateAppActivity.this);}}

第三方app版本更新 自定义接口协议+自定义对话框+显示进度对话框相关推荐

  1. android 显示进度,progressdialog-如何在Android中显示进度对话框?

    progressdialog-如何在Android中显示进度对话框? 当我单击"登录"按钮时,我想显示ProgressDialog,这需要时间才能移动到另一个页面. 我怎样才能做到 ...

  2. Android 11.0第三方app根据包名设置为横屏显示

    11.0由于在定制化平板项目中,默认都是横屏显示的,如果第三方app是竖屏显示显得非常不协调,所以根据客户要求修改 第三方app竖屏的也要修改成为横屏显示,由于没有源码 所以只有在PMS 解析app的 ...

  3. 自定义应用Crash时系统显示的对话框

    标题翻译的不好,大家有觉得更合适的欢迎下面评论 先看几张张图: 如何使用 1,添加依赖 dependencies {compile 'cat.ereza:customactivityoncrash:1 ...

  4. 当进度对话框和后台线程处于活动状态时,如何处理屏幕方向变化?

    我的程序在后台线程中执行一些网络活动. 在开始之前,它会弹出一个进度对话框. 该对话框在处理程序上关闭. 这一切都可以正常工作,除非对话框打开(并且背景线程正在运行)时屏幕方向发生变化. 此时,应用程 ...

  5. View(视图)——对话框之一般对话框

    一.对话框的分类 1.警告对话框  AlertDialog 1>一般对话框 2>单选对话框 3>复选对话框 4>自定义对话框 2.进度对话框 3.日期对话框 4.时间对话框 二 ...

  6. progressdialog进度框_ProgressDialog进度对话框

    ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条. 一个对话框中显示一个进步指标和一个可 ...

  7. android自定义dialog开源库,android-dialog: 此框架提供五种对话框的显示,并支持对话框的扩展,目的是为了提供对话框的统一管理,并提供对话框显示的公共接口。...

    android-dialog 此框架提供七种对话框的显示,并支持对话框的扩展,目的是为了提供对话框的统一管理,并提供对话框显示的公共接口. LoadingDialog:正在加载对话框 MessageD ...

  8. 【微信小程序控制硬件③】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!

    微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制: 为了兼顾更多的朋友和自己的学 ...

  9. 自定义_如何自定义协议

    前言 何为自定义协议,其实是相对标准协议来说的,这里主要针对的是应用层协议:常见的标准的应用层协议如http.ftp.smtp等,如果我们在网络通信的过程中不去使用这些标准协议,那就需要自定义协议,比 ...

  10. 鸿蒙os事例代码,鸿蒙HarmonyOS App开发造轮子之自定义圆形图片组件的实例代码

    一.背景 在采用Java配合xml布局编写鸿蒙app页面的时候,发现sdk自带的Image组件并不能将图片设置成圆形,反复了翻阅了官方API手册(主要查阅了Compont和Image相关的API),起 ...

最新文章

  1. 使用Jmeter至WebService压力测试
  2. LDAP操作过程中出现的错误代码
  3. Matlab数据类型学习图解
  4. python饼状图顺时针_Python matplotlib顺时针饼图
  5. 用css3实现Social Media Buttons
  6. 06Matplotlib数据可视化--6.2散点图
  7. 如何将索引碎片数量降至最低
  8. 支付宝——(JAVA)支付测试开发
  9. mysql over rank_总结几种MySQL中常见的排名问题
  10. 中兴c600olt数据配置_中兴OLT业务配置
  11. matlab仿真界面设计,基于MATLAB图形用户界面GUI的电路仿真实验的制作
  12. 手写原笔迹输入_原笔迹真实展现 E人E本 M1手写功能体验
  13. 创业手记 Mr.Hua
  14. stack在python中是什么意思_python栈是什么意思
  15. js html body onload,动态添加页面body OnLoad事件的简单js代码
  16. 所有iOS设备的屏幕分辨率
  17. Android EditText文本编辑框获取焦点调出键盘输入法
  18. BP神经网络的Java实现
  19. 莫比乌斯带catia建模_神奇的莫比乌斯带(mobius)
  20. 一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它是9的平方。请按要求完成:①在三位的正整数中寻找所有完全平方数;例如:144(12*12),676(26*26)

热门文章

  1. ai面试的优缺点_淘汰你的不一定是HR,有可能是AI面试官
  2. 计算机英语二国家线,历年考研英语国家线一览表
  3. php 京东 联盟 链接,完整的京东联盟自定义推广链接生产程序
  4. zh-cn语言(文化)代码与国家地区对照表
  5. node - 收藏集 - 掘金
  6. 《我的青春谁做主》经典搞笑台词
  7. beetl模板使用场景_BeetlSQL3性能
  8. Linux系统不同颜色文件代表什么意思?绿色、蓝色、白色、红色等代表的意义是什么?
  9. Unmapped Spring configuration files found.
  10. java+pom.xml+是什么_pom.xml文件是啥