Android 软件自动更新功能的实现_第1页
Android 软件自动更新功能的实现_第2页
Android 软件自动更新功能的实现_第3页
Android 软件自动更新功能的实现_第4页
Android 软件自动更新功能的实现_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论