如果我们想开发一款App,而这款App的需求中有对Apk文件的下载、安装和卸载功能的话(就像豌豆荚,当然功能不会那强大,因为强大的功能背后总是一些比较NB的技术在支持),那么这篇博客还是比较适合你的。好了,我们现在就来看看它们是怎么现实的吧。

文件下载关键代码:

private void downloadApkFile(String appName, String url) {final DownloadTask task = new DownloadTask(appName, url);task.controller = mDownloder.add(DemoApplication.SAVE_APK_PATH + task.storeFileName, task.url, new Listener<Void>() {@Overridepublic void onPreExecute() {task.invalidate(MainActivity.this);}@Overridepublic void onSuccess(Void response) {Toast.makeText(MainActivity.this, task.storeFileName + " Success!", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(NetroidError error) {NetroidLog.e(error.getMessage());}@Overridepublic void onFinish() {NetroidLog.e("onFinish size : " + Formatter.formatFileSize(MainActivity.this, new File(DemoApplication.SAVE_APK_PATH + task.storeFileName).length()));task.invalidate(MainActivity.this);}@Overridepublic void onProgressChange(long fileSize, long downloadedSize) {task.onProgressChange(MainActivity.this, fileSize, downloadedSize);}});}

这是一个已经封装好了的方法,我这里是通过点击按钮来调用这个方法。大家可以看到一个DownloadTask类,这个其实也可以是自己实现。不过我这里把分到了自己lib中了。这个工程Demo是基于Volley框架来开发的。不过我在Volley的代码中没有看到关于File相关的内容,只是一些byte相关的封装类。不过我现在是在网上找到了一些代码,是利用Volley的代码,不过有一些自己的东西在里面。我就把这个优化过的代码直接拿到用了。原连接现在有一些忘记了,不过不用担心,这里会把他的代码也一起放在我的资源里上传给大家。

在我的代码中与点击事件直接关联的还不是按钮的Onclicklistener,而是下面的这样一段代码:

 private void downloadApkFile() {String packageName = mPakeageNameEditText.getText().toString();if (ZFUtils.isEmptyString(packageName)) {Toast.makeText(MainActivity.this, "请输入程序包名", Toast.LENGTH_SHORT).show();return;}String taskCount = mParallelTaskCountEditText.getText().toString();if (!ZFUtils.isEmptyString(taskCount)) {int count = Integer.parseInt(taskCount);mDownloder.clearAll();// 这里做一个判断的目的是最多只能同时下载3个文件if (count <= 3) {initFilePath(Integer.parseInt(taskCount));} else {initFilePath(3);}}Toast.makeText(MainActivity.this, "Download...", Toast.LENGTH_SHORT).show();downloadApkFile(packageName + ".apk", DemoApplication.HI_APK_BASE_URL + packageName);//      downloadApkFile("com.sds.android.ttpod.apk", DemoApplication.HI_APK_BASE_URL + "com.sds.android.ttpod");
//      downloadApkFile("com.tencent.mobileqq.apk", DemoApplication.HI_APK_BASE_URL + "com.tencent.mobileqq");
//      downloadApkFile("com.kugou.android.apk", DemoApplication.HI_APK_BASE_URL + "com.kugou.android");
//      downloadApkFile("com.Qunar.apk", DemoApplication.HI_APK_BASE_URL + "com.Qunar");
//      downloadApkFile("com.tencent.mtt.apk", DemoApplication.HI_APK_BASE_URL + "com.tencent.mtt");
//      downloadApkFile("com.cootek.smartdialer.apk", DemoApplication.HI_APK_BASE_URL + "com.cootek.smartdialer");}

如上被注释掉的一块代码是用来测试一次能并行下载多少个文件,事实现证明一次最多对并行下载的文件数目不能超过3个。

关于安装和卸载倒是不难。如下:

/*** 安装Apk* @date 2014-12-12* @time 上午10:39:30*/private void installAPK(String apkUrl) {String apkPath = apkUrl + ".apk";String fileName = DemoApplication.SAVE_APK_PATH + apkPath;Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");startActivity(intent);}/*** 卸载Apk* @date 2014-12-12* @time 上午10:39:41*/private void uninstallAPK(String url) {Uri packageURI = Uri.parse(url);Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);startActivity(uninstallIntent);}

本程序必需的两个添加权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

第一个不用说,连网权限,第二个是对SD卡的写权限,这个一定要有,因为程序中对文件下载保存的路径为/sdcard/zfstar,当然这个可以自己修改。

下面的连接是本程序的原Demo和Volley的一个实例:

http://download.csdn.net/detail/u013761665/8260113

这里还有一点需要注意,大家可以看到下面的这张图片:


我用蓝色框出的部分是自己实现的,而红色的部分可以直接放到自己的工程代码就行了,当然还有一些是自己的意愿可有可无的代码。如果你觉得麻烦,还可以自己打成一个jar包,直接放到自己的工程即可。

Android中关于APK文件的下载、安装和卸载相关推荐

  1. Android代码实现APK文件的安装与卸载

    Android代码实现APK文件的安装与卸载 Android程序使用代码的安装和卸载!!! 安装: String str = "/CanavaCancel.apk"; String ...

  2. 如何在Eclipse中构建APK文件?

    当我使用Eclipse开发项目时, APK文件会在模拟器上运行. 但我想将我的应用程序上传到真实设备. 有没有工具来构建一个APK文件? 这个过程是什么? 或者是否可以从模拟器中提取APK文件? #1 ...

  3. Android 系统(181 )----Android中各类.mk文件的编写

    Android中各类.mk文件的编写 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_STATIC_JAVA_LIBRARIES := ...

  4. 上载android应用的apk文件变成了zip-网下转载的解决方案

    下载android应用的apk文件变成了zip--网上转载的解决方案 下载android应用的apk文件变成了zip--网上转载的解决方案 解决方案一. 最近把开发的android应用放在公司网站上, ...

  5. android apk 的信息,Android中获取apk基本信息

    一 PackageManager可以获得的所有包节点信息: 1,所有节点的基类:PackageItemInfo: 2,PackageInfo:package的全面信息,与AndroidManifest ...

  6. Xamarin For Android 打包编译APK文件详细图文教程

    原文链接 本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. ...

  7. 打包AS中的APK文件

    1.为什么要打包: 1).apk文件就是一个包,打包就是要生成apk文件,有了apk别人才能安装使用.打包分debug版和release包,通常所说的打包指生成release版的apk,release ...

  8. android反编译apk文件

    android反编译apk文件 android运行的是.dex文件的二进制码,java运行的是.class文件的码,那么android是怎么将.java格式的文件转换为.dex的文件?------&g ...

  9. 【错误记录】Android Studio 打包 apk 文件报错 ( The destination folder does not exist or is not writeable )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 工程中 , 打包 APK 文件时 , 报错 ; Android Studio 打包 apk 文件报错 : The ...

最新文章

  1. 在ATS插件中使用互斥锁
  2. javascript中apply、call和bind的区别
  3. 我所经历的大文件数据导出(后台执行,自动生成)
  4. Xamarin Android开发实战(上册)
  5. LeetCode 21 ——合并两个有序链表
  6. 【CSS3】好玩的动画线框
  7. JS 内置对象 String对象
  8. 牛客挑战赛43C-最优公式【二分】
  9. Qt工作笔记-QString中Split与section效率实践
  10. 带你掌握Redis数据类型:string和Hash
  11. 使用selenium启动(无界面)浏览器的隐私模式
  12. Windows 禁止mysql 自动更新
  13. Windows 7 正在走 XP 系统的老路
  14. Ubuntu下Apache+php+mysql网站架设详解
  15. php5apache2.dll,Apache2.2.8 + PHP5.2.5不能加载php5apache2.dll
  16. centos完全卸载mysql_centos下完全卸载mysql
  17. 中彩体彩排列3彩票软件 解压缩软件
  18. OpenCV-Python官方文档的查看
  19. fanuc机器人与示教器配对_FANUC机器人示教器维修
  20. 用ruby写了一个简单的Gmail登陆和获取未读邮件(http协议)

热门文章

  1. 现代密码学1.3--古典密码/historical cipher
  2. [密码学] 公钥密码基础与RSA
  3. [JAVA基础类库] String类 ○ StringBuffer类 ○ StringBuilder类
  4. web自动化测试常见面试题
  5. [crypto]-05-转载:PKCS #1 RSA Encryption Version 1.5介绍
  6. SEO -- 搜索引擎优化
  7. SEH(结构化异常处理)
  8. 控制寄存器,CPU缓存,PWT,PCD
  9. 2020年度总结(只有做好自己不喜欢的事情你才能做自己喜欢的事情)
  10. 静态分析android代码, 循环与trycatch