已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一个好的应用软件都是需要好的维护,从初出版本到最后精品,这个过程需要版本不停的更新,那么如何让用户第一时间获取最新的应用安装包呢?那么就要求我们从第一个版本就要实现升级模块这一功能。自 动更新功能的实现原理,就是我们事先和后台协商好一个接口,我们在应用的主Activity里,去访问这个接口,如果需要更新,后台会返回一些数据(比 如,提示语;最新版本的url等)。然后我们给出提示框,用户点击开始下载,下载完成开始覆盖安装程序,这样用户的应用就保持最新的拉。为了让大家容易理解,我像往常一样准备一个小例子,这里为了方便我就省去了和后台交互部分了。步骤分别如下:第一步:新建一个Android工程命名为:UpdateDemo.代码结构如下图所示:第二步:新建一个UpdateManager.java类,负责软件更新功能模块,代码如下:?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198package com.tutor.update;import java.io.File;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;import 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 UpdateManager private Context mContext;/提示语private String updateMsg =有最新的软件包哦,亲快下载吧;/返回的安装包urlprivate String apkUrl =:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk;private Dialog noticeDialog;private Dialog downloadDialog;/* 下载包安装路径 */private static final String savePath = /sdcard/updatedemo/;private static final String saveFileName = savePath + UpdateDemoRelease.apk;/* 进度条与通知ui刷新的handler和msg常量 */private ProgressBar mProgress;private static final int DOWN_UPDATE = 1;private static final int DOWN_OVER = 2;private int progress;private Thread downLoadThread;private boolean interceptFlag = false;private Handler mHandler = new Handler()public void handleMessage(Message msg) switch (msg.what) case DOWN_UPDATE:mProgress.setProgress(progress);break;case DOWN_OVER:installApk();break;default:break;public UpdateManager(Context context) this.mContext = context;/外部接口让主Activity调用public void checkUpdateInfo()showNoticeDialog();private void showNoticeDialog()AlertDialog.Builder builder = new Builder(mContext);builder.setTitle(软件版本更新);builder.setMessage(updateMsg);builder.setPositiveButton(下载, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();showDownloadDialog(););builder.setNegativeButton(以后再说, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss(););noticeDialog = builder.create();noticeDialog.show();private void showDownloadDialog()AlertDialog.Builder builder = new Builder(mContext);builder.setTitle(软件版本更新);final LayoutInflater inflater = LayoutInflater.from(mContext);View v = inflater.inflate(R.gress, null);mProgress = (ProgressBar)v.findViewById(R.gress);builder.setView(v);builder.setNegativeButton(取消, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();interceptFlag = true;);downloadDialog = builder.create();downloadDialog.show();downloadApk();private Runnable mdownApkRunnable = new Runnable() Overridepublic void run() try URL url = new URL(apkUrl);HttpURLConnection conn = (HttpURLConnection)url.openConnection();conn.connect();int length = conn.getContentLength();InputStream is = conn.getInputStream();File file = new File(savePath);if(!file.exists()file.mkdir();String apkFile = saveFileName;File ApkFile = new File(apkFile);FileOutputStream fos = new FileOutputStream(ApkFile);int count = 0;byte buf = new byte1024;doint numread = is.read(buf);count += numread;progress =(int)(float)count / length) * 100);/更新进度mHandler.sendEmptyMessage(DOWN_UPDATE);if(numread = 0)/下载完成通知安装mHandler.sendEmptyMessage(DOWN_OVER);break;fos.write(buf,0,numread);while(!interceptFlag);/点击取消就停止下载.fos.close();is.close(); catch (MalformedURLException e) e.printStackTrace(); catch(IOException e)e.printStackTrace();/* 下载apk* param url*/private void downloadApk()downLoadThread = new Thread(mdownApkRunnable);downLoadThread.start();/* 安装apk* param url*/private void installApk()File apkfile =new File(saveFileName);if (!apkfile.exists() return;Intent i =new Intent(Intent.ACTION_VIEW);i.setDataAndType(Uri.parse(file:/ + apkfile.toString(),application/vnd.android.package-archive);mContext.startActivity(i);第三步:在MainActivity.java也就是主Activity调用,代码如下:?12345678910111213141516171819package com.tutor.update;import android.app.Activity;import android.os.Bundle;public class MainAcitivityextends Activity private UpdateManager mUpdateManager;Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.main);/这里来检测版本是否需要更新mUpdateManager =new Upda
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机招聘笔试题库及答案
- 2025年传染病培训试题(+答案)
- 病房护理及值班、交接班制度考试题及答案
- 2025年产前准备试题及答案
- 2025年完整版液压与气压传动考试题及答案
- 营养性患儿疾病的护理
- 2025版介入放射学常见疾病症状及护理要点
- 教师课堂教学自我介绍
- 整形医院外科科普
- 非遗民俗工艺介绍
- 统编版语文二年级上册 6 数星星的孩子 课件
- 2025年度山西高校大学《辅导员》招聘考试题库(附答案)
- 压力容器安全知识培训课件
- 生物安全工作汇报
- 化工厂工程施工组织设计方案
- 2025年上海考警面试题目及答案
- 腹部彩超基础知识课件
- 混凝土超方管理办法
- 文化资源韧性分配模型-洞察及研究
- 企业信息化应用管理办法
- 2025国企竞聘笔考试试题库目简答题及解析答案
评论
0/150
提交评论