Android应用自动更新功能的实现!
http://blog.csdn.net/android_tutor/article/details/7015986

private static final int DOWN_UPDATE = 1;
private static final int DOWN_OVER = 2;
private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk"; private static String saveFileName = savePath + ""; 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;
}
}
}; LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.progress, null); private Runnable mdownApkRunnable = new Runnable() {
public 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 byte[1024]; do {
int 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();
}
}
} 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);
}

最新文章

  1. RabbitMQ高可用方案总结
  2. window.onload用法详解:
  3. C# 6.0 特性
  4. HTML5 重要标签及其属性学习
  5. java 实现验证码
  6. Linux 下的另一个密码破解工具medusa
  7. linux 下如何查看和踢除正在登陆的其它用户 ==&gt;Linux下用于查看系统当前登录用户信息的4种方法
  8. ASP.NET MVC- DropDownList绑定
  9. Emmet语法
  10. 如何获得JVM执行过程中调用的方法名
  11. js正则验证方法大全
  12. 推荐使用Tiny Framework web开发UI组件
  13. Vue2.0父子组件之间和兄弟组件之间的数据交互
  14. Asp.Net Boilerplate Project (ABP) 视频教程
  15. 安卓BLE测试apk
  16. 解决关于ios访问相机闪退问题
  17. node基础—http模块
  18. Tomcat启动报Error listenerStart错误 Context [] startup failed due to previous errors
  19. [BZOJ1005](HNOI 2008)明明的烦恼
  20. MYSQL 创建常见问题

热门文章

  1. Netty源码分析第1章(Netty启动流程)----&gt;第4节: 注册多路复用
  2. Streamr助你掌控自己的数据(3)——教你在Streamr市场上发布数据
  3. FirstWebApp
  4. Python参数传递,既不是传值也不是传引用
  5. 王者荣耀交流协会PSP Daily项目Postmortem结果
  6. 获取session
  7. oracle 分页的sql语句
  8. Leetcode题库——19.删除链表的倒数第 n 个节点【##】
  9. angularJS1笔记-(20)-模块化加载机制seajs
  10. 对it行业的一些看法