【android学习】更新程序
2015-08-20 18:10
411 查看
在程序启动时候基本都会有一个加载页面,在启动页面中我们基本完成下面几件事:
1:显示自己的产品logo
2:应用程序的初始化
3:检查版本更新
4:查看网络连接
下面我们就将完成检查版本更新功能:
一:获得程序版本号,与版本名称。AndroidManifest.xml文件中,可以看到android:versionCode="1"和android:versionName="1.0"两条语句,其中versionCode用于程序更新(给程序员看的),versionName给用户看的
versionName用于程序中版本信息显示(给用户看的)
二:获取服务器中的版本信息。服务器中的版本信息基本上使用两种表现形式
1:json格式的版本信息
对于xml的版本格式,需要解析xml,所以在这里就使用json格式的版本更新:
三:上面我们获得了服务器的APK下载地址
1:显示自己的产品logo
2:应用程序的初始化
3:检查版本更新
4:查看网络连接
下面我们就将完成检查版本更新功能:
一:获得程序版本号,与版本名称。AndroidManifest.xml文件中,可以看到android:versionCode="1"和android:versionName="1.0"两条语句,其中versionCode用于程序更新(给程序员看的),versionName给用户看的
/** * 得到应用程序的版本号 */ private int getVersionCode(){ // 用来管理手机的APK PackageManager pm = getPackageManager(); try { // 得到知道APK的功能清单文件 PackageInfo info = pm.getPackageInfo(getPackageName(), 0); return info.versionCode; } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return 0; } }
versionName用于程序中版本信息显示(给用户看的)
/** * 得到应用程序的版本名称 */ private String getVersionName() { // 用来管理手机的APK PackageManager pm = getPackageManager(); try { // 得到知道APK的功能清单文件 PackageInfo info = pm.getPackageInfo(getPackageName(), 0); return info.versionName; } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } }
二:获取服务器中的版本信息。服务器中的版本信息基本上使用两种表现形式
1:json格式的版本信息
{ "version":"2", "directions":"更新版本说明", "httpurl":"http://localhost:8080/test.apk" }2:xml格式的版本信息
<?xml version="1.0" encoding="utf-8"?> <info> <version>2.0</version> <directions>更新版本说明</directions> <httpurl>http://localhost:8080/test.apk</httpurl> </info>
对于xml的版本格式,需要解析xml,所以在这里就使用json格式的版本更新:
/** * 获得服务器的版本信息 * @author zkq * jsonString就是服务器的json信息 */ class ServerVersionInfo implements Runnable{ /** * 版本号链接地址 */ String url; /** * 从服务器获得的版本信息字符串 */ String jsonString; public String getJsonString() { return jsonString; } public ServerVersionInfo(String url) { this.url = url; } @Override public void run() { try { URL url2 = new URL(url); HttpURLConnection conn = (HttpURLConnection) url2.openConnection();//联网 conn.setConnectTimeout(5000);//设置连接超时 conn.setRequestMethod("GET");//设置以get请求 int code = conn.getResponseCode();//获得链接码 if (code == 200) {//200表示联网成功 InputStream is = conn.getInputStream();//获得输入流 jsonString = readFromStream(is); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 将输入流转换为inputstream * @param is * @return * @throws IOException */ public String readFromStream(InputStream is) throws IOException{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer))!=-1) { baos.write(buffer, 0, len); } is.close(); String result = baos.toString(); baos.close(); return result; } }
三:上面我们获得了服务器的APK下载地址
http://localhost:8080/test.apk[/code] 我们就可以通过这个地址将文件下载到SD卡,这里我们用到一个开源的下载框架afinal jar包下载地址。
下面的代码,需要在lib文件中加入上面链接下载的afinal.jar文件
在对sdcard读写时候,需要加入权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>/** * 下载文件 * uri 下载地址 * saveName 保存名字。如:test.apk */ public void downLoad(String uri,String saveName){ //判断sdcard是否挂载 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { FinalHttp finalHttp = new FinalHttp(); /* * 第一个参数:下载链接地址 * 第二个参数:保存地址 * 第三个参数:毁掉方法 */ finalHttp.download(uri, Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+saveName, new AjaxCallBack<File>() { //下载失败 @Override public void onFailure(Throwable t, int errorNo, String strMsg) { super.onFailure(t, errorNo, strMsg); } //下载进度 count为下载文件总长度,current当前下载长度 @Override public void onLoading(long count, long current) { super.onLoading(count, current); } //下载成功 t为下载下来的文件 @Override public void onSuccess(File t) { super.onSuccess(t); //安装文件 //installAPK(t); } }); } }
四:下载完成以后,需要安装文件,这时候,调用系统的安装器/** * 安装APK * @param t */ private void installAPK(File t) { Intent intent = new Intent(); intent.setAction("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive"); startActivity(intent); }
好了,到这里更新文件就完成了。
相关文章推荐
- 深入讲解Android中Activity launchMode
- android中延迟执行某个任务
- Android 带你玩转实现游戏2048 其实2048只是个普通的控件
- Android studio 问题与设置
- Android Studio 使用夜神模拟器Nox
- Android开发之百度地图
- 利用Android源码工具链直接编译c文件
- Android 相对布局
- Android FrameLayout子view居中(左居中,右居中)等
- Handler引起的内存泄露问题
- 解决Android软键盘弹出引起的各种不适
- Android Hal 分析
- Android ScrollView截图和图片保存到相册的方式
- Android中自定义视图View之---前奏篇
- Android内存优化之内存缓存
- Android——Volley学习笔记(三)
- Android Activity四种启动模式简介
- android stdudio 更新最新SDK 可用框架 用百分比view
- Android——Volley学习笔记(二)
- Android——Volley学习笔记(一)