源码简介
本项目是一个多线程下载应用并提示是否安装的小例子,从网上下载apk存储到手机指定目录,可以在通知栏显示下载进度进度,下载完成后会有一个对话框提示用户是否安装,如果不需要可以删除,项目有非常非常详细的中文目录,项目涉及知识:文件流、网络下载链接协议、读写权限、Handler、Notification、跑马灯。
源码运行截图
源码片段
- // 下载APK的线程匿名类START
- private Runnable mdownApkRunnable = new Runnable() {
- @Override
- public void run() {
- try {
- URL url = new URL(apkDownloadPath);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.connect();
- int length = conn.getContentLength();
- InputStream is = conn.getInputStream();
- File file = new File(savePath);
- Log.e("test", file.exists()+"");
- if (!file.exists()) {
- Log.e("test1", file.exists()+"");
- file.mkdir();
- Log.e("test2", file.exists()+"");
- }
- String apkFile = saveFileName;
- Log.e("test3", apkFile);
- 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);
- if(handmsg < progress){
- handmsg ++;
- mHandler.sendEmptyMessage(DOWN_UPDATE);
- }
- // 更新进度
- if (numread <= 0) {
- // 下载完成通知安装
- mHandler.sendEmptyMessage(DOWN_OVER);
- break;
- }
- fos.write(buf, 0, numread);
- } while (true);// 点击取消就停止下载.
- fos.close();
- is.close();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- Log.e("test", e.getMessage());
- }
- }
- };
源码链接:http://down.51cto.com/data/1968727