安卓app新版本的检测与更新(升级)
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新版本的检测与更新(升级)相关推荐
- android o 三星,安卓8.0哪些手机可更新升级 Android O支持谷歌三星索尼机型
安卓8.0奥利奥支持哪些机型?哪些设备获得Android 8.0升级?Android 8.0奥利奥(新功能特性介绍)今日正式推出,想必很多安卓粉想抢先体验,下面就由小编为您详细介绍介绍哦. Andro ...
- 银河麒麟 安卓nginx_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
上方文 近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统&qu ...
- 启动root用户 银河麒麟_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
上方文 近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统&qu ...
- 安卓原生系统_全新国产操作系统登场:原生支持微信、吃鸡等海量安卓App
近些年,国产芯片不断迅猛发展,CPU处理器有龙芯.飞腾等竞技,而有了硬件,更要有系统和软件生态,这方面的进展也值得肯定. Kydroid是麒麟团队和技德系统为"银河麒麟操作系统"打 ...
- wavecn 2.0.0.5 正式版_微信7.0.5怎么更新?微信7.0.5安卓版下载与更新升级教程
6月29日,腾讯发布了微信7.0.5安卓正式版,带来了不少细节变化,不过很多安卓机用户反馈并没有接收到推送,不少粉丝朋友表示不知道微信7.0.5怎么更新升级.今天,芝麻科技网详细介绍下微信7.0.5安 ...
- 安卓APP自动更新功能实现
安卓APP自动更新功能实现 前言 代码实现 前言 安卓App自动更新基本上是每个App都需要具备的功能,接下来介绍一下实现自动更新的步骤. 代码实现 App自动更新主要分为新版本检测.升级弹窗.下载升 ...
- windows11推出:win10可免费升级,支持安卓APP,减重40%
关于windows要推新版,并且在6月24日晚发布,相信很多人都清楚了. 毕竟在发布之前,微软可以狠狠地宣传了一把的,并表示这是自2015年以来最大的更新,而微软副总裁尤素福·迈赫迪甚至表示" ...
- 【uniapp】uniapp安卓APP在线自动升级功能
纯前端实现uniapp写的安卓APP跟IOS在线自动升级功能 关于Uniapp自动升级用到的阿里云要收费的问题 使用的UI框架为UVIEW2.0 用到的请求等 总结下思路 就是通过获取XML文件返回来 ...
- 安卓APP自动更新实现
一.参考文献 简单实现安卓app自动更新功能 - 简书 安卓app自动更新功能完美实现_白云天的博客-CSDN博客_android 自动更新 Android 实现自动更新及强制更新功能_farley的 ...
最新文章
- windows阿里云服务器配置
- 第二章 Matlab变量
- Light-Head R-CNN
- 推荐15个让新手爱不释手的Python高级库
- 关于计算机维护的相关试题,比较好写的计算机系统维护论文选题 计算机系统维护论文题目哪个好...
- 在linux看数据库表空间,Linux平台达梦数据库V7之表空间管理
- WaveShaperNode
- 翻译:Hystrix - How To Use
- 20200222:串联所有单词的子串(leetcode30)
- Go语言结构应用实例
- MYSQL:RELPACE用法
- 删除pdf(论文)的行号
- 黑马程序员ssm总结[大全版本,有对应pdf+源码](spring->springmvc-->springboot-->maven高级->cloud微服务)
- centos部署mosquitto
- 在线教育发展前景广阔
- 快手公布于香港联交所主板上市计划详情,拟融资394.77亿港元
- Ajax实战(Ajax in action中文版)[一周内7折] →推荐 →新书
- Linux系统命令(电子邮件新闻组)
- Python爬取m3u8格式视频并解密ts文件合并转为mp4格式
- 设计一个猜拳游戏,完成人机猜拳互动游戏的开发。
热门文章
- 用Python实现文本内容生成二维码
- J-Link在keil软件找不到芯片 与 软件提示dll错误
- 【Windows任务管理器硬盘监控功能异常】任务管理器磁盘读写功能异常,无任何数据
- html版本的网站地图只适合,网站地图-乐云SEO优化知识
- 正高职称 程序员_研究员级高级工程师和高级工程师有什么区别,副研究员与高级工程师有什么差别...
- adb 禁用手机系统的更新
- 基于对抗互信息学习特征解耦的零样本语音转换|INTERSPEECH 2022
- 2015春季实习生招聘 多益网络科技有限公司笔试+面试 游戏开发工程师
- Office2010:为什么我的PPT需要修复?
- kali 2020 换源、中文支持