![Android 软件自动更新功能的实现_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/a2580655-324a-4fab-885a-15a90a800a85/a2580655-324a-4fab-885a-15a90a800a851.gif)
![Android 软件自动更新功能的实现_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/a2580655-324a-4fab-885a-15a90a800a85/a2580655-324a-4fab-885a-15a90a800a852.gif)
![Android 软件自动更新功能的实现_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/a2580655-324a-4fab-885a-15a90a800a85/a2580655-324a-4fab-885a-15a90a800a853.gif)
![Android 软件自动更新功能的实现_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/a2580655-324a-4fab-885a-15a90a800a85/a2580655-324a-4fab-885a-15a90a800a854.gif)
![Android 软件自动更新功能的实现_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/13/a2580655-324a-4fab-885a-15a90a800a85/a2580655-324a-4fab-885a-15a90a800a855.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。自 动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比 如,提示语;最新版本的url等)。然后我们给出提示框,用户点击开始下载,下载完成开始覆盖安装程序,这样用户的应用就保持最新的拉。为了让大家容易理解,我像往常一样准备一个小例子,这里为了方便我就省去了和后台交互部分了。步骤分别如下:第一步:新建一个Android工程命名为
2、:UpdateDemo.代码结构如下图所示:第二步:新建一个UpdateManager.java类,负责软件更新功能模块,代码如下:?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311
3、4115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198package com.tutor.update; import java.io.F
4、ile;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import .HttpURLConnection;import .MalformedURLException;import .URL; import android.app.AlertDialog;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.Context;imp
5、ort android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnClickListener;import .Uri;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.widget.ProgressBar; public class Up
6、dateManager private Context mContext; /提示语 private String updateMsg = "有最新的软件包哦,亲快下载吧" /返回的安装包url priva
7、te String apkUrl = ":8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk" private Dialog noticeDialog; private Dialog downloadDialog;
8、0; /* 下载包安装路径 */ private static final String savePath = "/sdcard/updatedemo/" private static final String saveFileName = savePath + "UpdateDemoRelease.apk" /* 进度条与通知ui刷新的
9、handler和msg常量 */ private ProgressBar mProgress; private static final int DOWN_UPDATE = 1; private static final int DOWN_OVER = 2;
10、 private int progress; private Thread downLoadThread; private boolean interceptFlag = false; private Handler mHandler = new
11、Handler() public void handleMessage(Message msg) switch (msg.what) case DOWN_UPDATE: &
12、#160; mProgress.setProgress(progress); break; case DOWN_OVER:
13、160; installApk(); b
14、reak; default: break;
15、; public UpdateManager(Context context) this.mContext = context; /外部接口让主Activity调用
16、0; public void checkUpdateInfo() showNoticeDialog(); private void showNoticeDialog() Ale
17、rtDialog.Builder builder = new Builder(mContext); builder.setTitle("软件版本更新"); builder.setMessage(updateMsg); builder.setPositiveButton("下载"
18、, new OnClickListener() Override public void onClick(DialogInterface dialog, int which)
19、60; dialog.dismiss(); showDownloadDialog(); &
20、#160; ); builder.setNegativeButton("以后再说", new OnClickListener()
21、; Override public void onClick(DialogInterface dialog, int which) dialog.dismiss();
22、60; ); noticeDialog = builder.create();
23、; noticeDialog.show(); private void showDownloadDialog() AlertDialog.Builder builder = new Builder(mContext); bu
24、ilder.setTitle("软件版本更新"); final LayoutInflater inflater = LayoutInflater.from(mContext); View v = inflater.inflate(R.gress, null);
25、160; mProgress = (ProgressBar)v.findViewById(R.gress); builder.setView(v); builder.setNegativeButton(&quo
26、t;取消", new OnClickListener() Override public void onClick(DialogInterface dialog, int which)
27、; dialog.dismiss(); interceptFlag = true; ); &
28、#160; downloadDialog = builder.create(); downloadDialog.show(); downloadApk();
29、60; private Runnable mdownApkRunnable = new Runnable() Override public void run()
30、0;try URL url = new URL(apkUrl);
31、0;HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.connect(); int length = conn.getConte
32、ntLength(); InputStream is = conn.getInputStream();
33、0; File file = new File(savePath); if(!file.exists()
34、0; file.mkdir(); String apkFile = saveFileName;
35、60; File ApkFile = new File(apkFile); FileOutputStream fos = new FileOutputStream(ApkFile); &
36、#160; int count = 0; byte buf = new byte1024;
37、; do
38、60; int numread = is.read(buf); count += numread; &
39、#160; progress =(int)(float)count / length) * 100); /更新进度
40、; mHandler.sendEmptyMessage(DOWN_UPDATE); if(numread <= 0) &
41、#160; /下载完成通知安装 mHandler.sendEmptyMessage(DOWN_OVER);
42、60; break;
43、60; fos.write(buf,0,numread); while(!interceptFlag);/点击取消就停止下载.
44、; fos.close(); is.close();
45、 catch (MalformedURLException e) e.printStackTrace(); catch(IOException e)
46、0; e.printStackTrace();
47、160; /* * 下载apk * param url */ private void downloadApk() downLoadThread
48、 = new Thread(mdownApkRunnable); downLoadThread.start(); /* * 安装apk * param url */ private
49、 void installApk() File apkfile = new File(saveFileName); if (!apkfile.exists() return;
50、 Intent i = new Intent(Intent.ACTION_VIEW); i.setDataAndType(Uri.parse("file:/" + apkfile.toString(), "application/vnd.android.package-archive"); &
51、#160; mContext.startActivity(i); 第三步:在MainActivity.java也就是主Activity调用,代码如下:?12345678910111213141516171819package com.tutor.update; import android.app.Activity;import android.os.Bundle; public class Main
52、Acitivity extends Activity private UpdateManager mUpdateManager; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级下教师个人工作计划7篇
- 新班主任的工作心得感悟7篇
- 大学《古代文学》培训课件:第三章-正始文学(竹林七贤与正始之音)
- 2024版七年级上册道德与法治模拟试卷
- 大班音乐虫儿飞教案6篇
- 产科健康科普-顺产的优点
- 2024年毕节医学高等专科学校高职单招笔试历年职业技能测验典型例题与考点解析含答案
- 2024年安徽工商职业学院高职单招笔试历年职业技能测验典型例题与考点解析含答案
- 人教版化学九年级上册创新课件:6.2 二氧化碳制取的研究
- 深入学生家长沟通促进家校合作三篇
- 征兵心理测试题及答案
- 人教版高一英语必修一全册课件
- 五年级上册英语课件 be动词的用法 人教PEP版
- 标准物质销毁记录表
- 社区获得性肺炎临床路径及表单
- 产品供货证明模板
- 放射性皮炎的防治课件
- 医院安全生产风险分级管控和隐患排查治理双体系
- 新概念英语第一册全册重点句型(英文+中文)
- 灵芝孢子油课件
- 4M变化点管理表
评论
0/150
提交评论