11.新版本的检测与更新

#获取版本号# ****

id : 驼峰式命名 :   控件的类型_控件所在位置_控件所表示的逻辑内容/*** 获取应用程序的版本号* @return*/
public String getVersionName(){//1.包的管理者,获取应用程序中清单文件中信息PackageManager packageManager = getPackageManager();try {//2.根据包名获取应用程序相关信息//packageName : 应用程序的包名//flags : 指定信息的标签,指定了标签就会获取相应标签对应的相关信息//PackageManager.GET_ACTIVITIES : 获取跟activity相关的信息//getPackageName() : 获取应用程序的包名PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(),0);//3.获取应用程序版本号名称String versionName = packageInfo.versionName;return versionName;} catch (NameNotFoundException e) {//找不到包名的异常e.printStackTrace();return null;}
}

#连接服务器# ****

/*** 更新版本*/
private void update() {//连接服务,联网,耗时操作,4.0不允许在主线程中执行耗时操作new Thread(){public void run() {//1.连接服务器try {//1.1获取连接地址URL url = new URL("xxxxxx");//1.2获取连接的操作HttpURLConnection conn = (HttpURLConnection) url.openConnection();//http://协议//1.3设置超时时间conn.setConnectTimeout(5000);//连接超时时间//conn.setReadTimeout(5000);//读取超时时间//1.4设置请求方式conn.setRequestMethod("GET");//post//1.5获取服务器返回的状态码   200  404  500int responseCode = conn.getResponseCode();if (responseCode == 200) {//连接成功}else{//连接失败}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}};}.start();
}

#数据封装形式# ****

updateinfo.html   apk文件存放到apache-tomcat-6.0.35-windows-x86\apache-tomcat-6.0.35\webapps\ROOTjson : {"code":"2.0","apkurl":"xxxxxxxx","des":"新版本上线了,快来下载吧!!!!"}
code :接口
注意保存的格式:utf-8无bom格式   notepad++ ; editplus :  utf-8(选择)    utf-8+bom

#获取服务器返回的数据# ****

//2.连接成功,获取服务返回的数据  1.code : 新版本的版本号    2.apkurl : 新版本的下载地址     3.des  : 描述信息
//2.1.服务器是如何封装数据     xml   json : 返回就是一个json串
System.out.println("连接成功.....");
//2.2.获取服务器返回的数据,流信息
InputStream inputStream = conn.getInputStream();
//2.3.将流信息转化成字符串
String json = StreamUtils.parserStream(inputStream);
//2.4.解析数据
JSONObject jsonObject = new JSONObject(json);
//2.5.获取数据
code = jsonObject.getString("code");
apkurl = jsonObject.getString("apkurl");
des = jsonObject.getString("des");工具类/*** 将流信息转化成字符串* @param in* @return* @throws IOException */
public static String parserStream(InputStream in) throws IOException{//字符流BufferedReader br  = new BufferedReader(new InputStreamReader(in));//写入流StringWriter sw = new StringWriter();//读写操作,数据缓冲区String str = null;while((str = br.readLine()) != null){//写入操作sw.write(str);}//关流sw.close();br.close();return sw.toString();
}

#查看是否有最新版本,弹出对话框提醒用户更新版本# ****

1.查看是否有最新版本,在update方法//3.查看是否有最新版本//3.1.判断服务返回code值和我们当前应用程序的版本号是否一致if (code.equals(getVersionName())) {//不升级}else{//升级//3.2.弹出对话框message.what = MSG_UPDATE_DIALOG;}在finally给handler发送消息finally{//不管有没有异常,都会执行handler.sendMessage(message);}
2.在handler中接受信息做出判断private Handler handler = new Handler(){public void handleMessage(Message msg) {switch (msg.what) {case MSG_UPDATE_DIALOG://弹出对话框showUpdateDialog();break;}}};
3.弹出对话框/*** 3.3.弹出对话框*/protected void showUpdateDialog() {AlertDialog.Builder builder = new Builder(this);//设置标题builder.setTitle("新版本:"+code);//设置图标builder.setIcon(R.drawable.ic_launcher);//设置描述信息builder.setMessage(des);//设置升级按钮builder.setPositiveButton("升级", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});//设置取消按钮builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});//显示对话框
//      builder.create().show();效果一致builder.show();}

#下载最新版本# ****

/*** 4.下载最先版本*/
protected void download() {HttpUtils httpUtils = new HttpUtils();//4.1.判断SD卡是否挂载if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//4.2.下载//url : 新版本的下载地址//target : 保存下载文件的路径//callback:回调监听RequestCallBackhttpUtils.download(apkurl, "/mnt/sdcard/mobilesafexian2.0.apk", new RequestCallBack<File>() {//下载成功的调用@Overridepublic void onSuccess(ResponseInfo<File> arg0) {}//下载失败的调用@Overridepublic void onFailure(HttpException arg0, String arg1) {}//4.2.1显示当前的下载进度//total : 总进度//current : 当前的进度//isUploading : 是否支持断点续传@Overridepublic void onLoading(long total, long current, boolean isUploading) {super.onLoading(total, current, isUploading);//显示控件tv_spalsh_plan.setVisibility(View.VISIBLE);//给控件设置显示下载进度tv_spalsh_plan.setText(current+"/"+total);//    132/520}});}
}

#安装最新版本# ****

 /*** 5.安装最新的版本*/protected void install() {/*** <intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="content" />//   content://<data android:scheme="file" />// file:代表文件   File<data android:mimeType="application/vnd.android.package-archive" /></intent-filter>*/Intent intent = new Intent();intent.setAction("android.intent.action.VIEW");intent.addCategory("android.intent.category.DEFAULT");//setData和setType是相互冲突的,两个数据是会相互覆盖的
//      intent.setType("application/vnd.android.package-archive");
//      intent.setData(Uri.fromFile(new File("/mnt/sdcard/mobilesafexian2.0.apk")));intent.setDataAndType(Uri.fromFile(new File("/mnt/sdcard/mobilesafexian2.0.apk")), "application/vnd.android.package-archive");//在当前的activity退出的时候,会调用之前activity的OnActivityResult方法//requestCode : 请求码,表示activity去打开新的activity的时候在新的activity中标示// a   b   c    现在a -> c    b-> c ,在c中我们是要确定那个a的intent那个是b的intent//在这里我们用不到  所以0startActivityForResult(intent, 0);}重写OnActivityResult方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);enterHome();}

安卓app新版本的检测与更新(升级)相关推荐

  1. android o 三星,安卓8.0哪些手机可更新升级 Android O支持谷歌三星索尼机型

    安卓8.0奥利奥支持哪些机型?哪些设备获得Android 8.0升级?Android 8.0奥利奥(新功能特性介绍)今日正式推出,想必很多安卓粉想抢先体验,下面就由小编为您详细介绍介绍哦. Andro ...

  2. 银河麒麟 安卓nginx_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP

    上方文 近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统&qu ...

  3. 启动root用户 银河麒麟_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP

    上方文 近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统&qu ...

  4. 安卓原生系统_全新国产操作系统登场:原生支持微信、吃鸡等海量安卓App

    近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统"打 ...

  5. wavecn 2.0.0.5 正式版_微信7.0.5怎么更新?微信7.0.5安卓版下载与更新升级教程

    6月29日,腾讯发布了微信7.0.5安卓正式版,带来了不少细节变化,不过很多安卓机用户反馈并没有接收到推送,不少粉丝朋友表示不知道微信7.0.5怎么更新升级.今天,芝麻科技网详细介绍下微信7.0.5安 ...

  6. 安卓APP自动更新功能实现

    安卓APP自动更新功能实现 前言 代码实现 前言 安卓App自动更新基本上是每个App都需要具备的功能,接下来介绍一下实现自动更新的步骤. 代码实现 App自动更新主要分为新版本检测.升级弹窗.下载升 ...

  7. windows11推出:win10可免费升级,支持安卓APP,减重40%

    关于windows要推新版,并且在6月24日晚发布,相信很多人都清楚了. 毕竟在发布之前,微软可以狠狠地宣传了一把的,并表示这是自2015年以来最大的更新,而微软副总裁尤素福·迈赫迪甚至表示" ...

  8. 【uniapp】uniapp安卓APP在线自动升级功能

    纯前端实现uniapp写的安卓APP跟IOS在线自动升级功能 关于Uniapp自动升级用到的阿里云要收费的问题 使用的UI框架为UVIEW2.0 用到的请求等 总结下思路 就是通过获取XML文件返回来 ...

  9. 安卓APP自动更新实现

    一.参考文献 简单实现安卓app自动更新功能 - 简书 安卓app自动更新功能完美实现_白云天的博客-CSDN博客_android 自动更新 Android 实现自动更新及强制更新功能_farley的 ...

最新文章

  1. windows阿里云服务器配置
  2. 第二章 Matlab变量
  3. Light-Head R-CNN
  4. 推荐15个让新手爱不释手的Python高级库
  5. 关于计算机维护的相关试题,比较好写的计算机系统维护论文选题 计算机系统维护论文题目哪个好...
  6. 在linux看数据库表空间,Linux平台达梦数据库V7之表空间管理
  7. WaveShaperNode
  8. 翻译:Hystrix - How To Use
  9. 20200222:串联所有单词的子串(leetcode30)
  10. Go语言结构应用实例
  11. MYSQL:RELPACE用法
  12. 删除pdf(论文)的行号
  13. 黑马程序员ssm总结[大全版本,有对应pdf+源码](spring->springmvc-->springboot-->maven高级->cloud微服务)
  14. centos部署mosquitto
  15. 在线教育发展前景广阔
  16. 快手公布于香港联交所主板上市计划详情,拟融资394.77亿港元
  17. Ajax实战(Ajax in action中文版)[一周内7折] →推荐 →新书
  18. Linux系统命令(电子邮件新闻组)
  19. Python爬取m3u8格式视频并解密ts文件合并转为mp4格式
  20. 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。

热门文章

  1. 用Python实现文本内容生成二维码
  2. J-Link在keil软件找不到芯片 与 软件提示dll错误
  3. 【Windows任务管理器硬盘监控功能异常】任务管理器磁盘读写功能异常,无任何数据
  4. html版本的网站地图只适合,网站地图-乐云SEO优化知识
  5. 正高职称 程序员_研究员级高级工程师和高级工程师有什么区别,副研究员与高级工程师有什么差别...
  6. adb 禁用手机系统的更新
  7. 基于对抗互信息学习特征解耦的零样本语音转换|INTERSPEECH 2022
  8. 2015春季实习生招聘 多益网络科技有限公司笔试+面试 游戏开发工程师
  9. Office2010:为什么我的PPT需要修复?
  10. kali 2020 换源、中文支持