android 轻松实现后台搭建+app版本更新
看完本文,您可以学到:
1.版本更新的方法
2.与后台的交互
3.android中handler的使用
4.android中progressdialog的使用
话不多说,先来看看效果图:
一、大致思路阐述
首先,我们要有一个可以被手机访问的后台。
这里有两种方法,在调试的时候我们可以利用手机和笔记本连到同一个局域网的方式,在电脑上开启个类似php或者javaee一样样的后台服务。
但是对于没有相关后台开发经验的朋友,这里有一种更好的方式:利用github等免费空间来实现。详细请戳我的另一篇博文利用github建立你的个人网站 。
ok,有了存放资源的后台,我们要放点什么东西呢?很简单,一个包含最新版本信息的update.txt文件和一个.apk文件足矣!
txt文件里写啥?看下我的例子:
解释一下: &是分隔符,用于手机端获取到信息后的分割。1.3代表着最新版本号,之后的是新版本的描述,最后的是新版本apk的下载地址(这里我用了局域网)。一开始的是啥呢?我当时在试验的时候,在开头并没有加额外信息,即以1.3开头,实验之后,发现手机端获取到txt文本信息后不能正确解析,原因我觉得是因为txt文件的开头包含有一些自带的字符,手机解析时会有问题。(感兴趣的朋友可以去深究,还望不吝赐教!)
ok,有了新版本的信息,我们要怎么做?
我们要获取到最新的版本号,然后与当前app的版本号进行对比。如果低于最新版本,就到下载地址中去下载。
二、详细代码解释
首先,新建一个updateinfo类,用来与update.txt的内容对应,这个很简单:
[java] view plaincopy
package com.example.appupdatedemo;
public class updateinfo
{
}
然后,写一个类去获取更新的信息,即我们的update.txt文件:
updateinfoservice:
import java.io.bufferedreader;
import java.io.inputstreamreader;
import java.net.httpurlconnection;
import java.net.url;
import android.content.context;
public class updateinfoservice {
这里获取文件的方法是先创建一个httpurlconnection,再获取输入流。细心的朋友可能注意到其中有个类,叫getserverurl,这个类是用来存放后台地址信息的:
/**
获取服务器ip地址
*/
public class getserverurl{
ok,到了这一步,准备工作都做完了,接下来只剩一个类了!即我们的mainacticity,一共一百多行,我们分几部分来讲。
第一部分代码,做的工作是获取版本更新信息。
public class mainactivity extends activity {
这里我们用到了new thread+ handler的方式去进行异步加载版本信息,主要是因为在安卓中要把耗时任务放在非主线程中执行,否则会造成阻塞,抛出无响应异常。还有另外的实现方式是安卓封装的asynctask,具体可以参考这篇博文:android asynctask详解。
第二部分,判断是否是最新版本,如果不是,跳出对话框选择是否更新:
private void showupdatedialog() {
private boolean isneedupdate() {
// 获取当前版本的版本号
private string getversion() {
这段里面要注意的是怎么获取当前版本,方法是使用packagemanager提供的getpackageinfo方法,返回的是manifest文件中的版本号。其他的代码挺简单,注释也挺全的。如果有问题,欢迎留言。
接下来是最后一部分,下载文件。
//安装文件,一般固定写法
这一段主要是利用progressdialog在下载的时候实时更新进度,主要利用的是一个字节数组的缓冲区。即每次获取到的内容填满缓冲区后就写入到本地本件中。这里我把缓冲区的大小设置为10个字节(1024会比较好),理由是因为在同一个局域网中速度特别快,刷一下就下载完了,看不出进度条效果,缓冲区调小点就ok了。