博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
app常规功能:检查更新 异步请求下载apk文件,更新进度条,最后安装apk
阅读量:6000 次
发布时间:2019-06-20

本文共 3463 字,大约阅读时间需要 11 分钟。

hot3.png

检查更新是安卓app的常规功能,现在分享一下我做的检查更新的代码,事件触发为点击立即更新按钮。直接上代码:

        //创建ProgressDialog对象 m_pDialog = new ProgressDialog(UpdateActivity.this);	 	                // 设置进度条风格,风格为圆形,旋转的	                m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);	 	                // 设置ProgressDialog 标题	                m_pDialog.setTitle("提示");	                	                // 设置ProgressDialog 提示信息	                m_pDialog.setMessage("正在下载最新的apk");	 	                // 设置ProgressDialog 的进度条是否不明确	                m_pDialog.setIndeterminate(false);	                	                // 设置ProgressDialog 是否可以按退回按键取消	                m_pDialog.setCancelable(true);	                	                // 让ProgressDialog显示	                m_pDialog.show();			new DownloadApkAsyncTask().execute("");
/***	 * 下载新版本apk并安装	 * @author zhangda	 *	 */	private class DownloadApkAsyncTask extends AsyncTask
{ @Override protected String doInBackground(String... paramArray) { String httpUrl = Constant.URL_PREFIX + "app/mkb_" + newVersionName + ".apk"; final String fileName = "mkb_" + newVersionName + ".apk"; String path = Environment.getExternalStorageDirectory().getPath(); File tmpFile = new File(path + "/mkb"); if (!tmpFile.exists()) { tmpFile.mkdir(); } file = new File(path + "/mkb/" + fileName); try { URL url = new URL(httpUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is = conn.getInputStream(); //计算文件长度 int lenghtOfFile = conn.getContentLength(); FileOutputStream fos = new FileOutputStream(file); byte[] buf = new byte[1024]; conn.connect(); int len1 = 0; long total = 0; if (conn.getResponseCode() >= 400) { Toast.makeText(UpdateActivity.this, "连接超时", Toast.LENGTH_SHORT).show(); m_pDialog.cancel(); } else { while ((len1 = is.read(buf)) > 0) { total += len1; //total = total + len1 System.out.println((int)((total*100)/lenghtOfFile)); publishProgress((int)((total*100)/lenghtOfFile)); fos.write(buf, 0, len1); } } conn.disconnect(); fos.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String result) { if(file != null){ m_pDialog.cancel(); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); startActivity(intent); } } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); System.out.println(values[0]); if(values[0] < 100){ m_pDialog.setProgress(values[0]); } if(values[0] == 100){ m_pDialog.cancel(); UpdateActivity.this.finish(); } } }

转载于:https://my.oschina.net/u/1011854/blog/400626

你可能感兴趣的文章
电话本管理程序(实现增删改查功能)
查看>>
LOCK_TIMEOUT
查看>>
Python脱产8期 Day29 2019/5/24
查看>>
学c#语言的感想
查看>>
Windows 驱动模型的发展历史
查看>>
Android视图的截图
查看>>
App列表之分组ListView
查看>>
Android&iOS崩溃堆栈上报
查看>>
关于iOS开发的各种证书
查看>>
【Openjudge】 算24
查看>>
lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
查看>>
ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
查看>>
linux查杀病毒的几个思路
查看>>
宽带速度
查看>>
构建之法阅读笔记5
查看>>
Android判断网络连接状态
查看>>
leetcode_1033. Moving Stones Until Consecutive
查看>>
logback logback.xml常用配置详解(二)<appender>
查看>>
js常用的函数库
查看>>
Sqlserver 数据库安全
查看>>