Android中关于APK文件的下载、安装和卸载
来源:互联网 发布:淘宝教程开店秘籍 编辑:程序博客网 时间:2024/05/21 19:23
如果我们想开发一款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,当然这个可以自己修改。
http://download.csdn.net/detail/u013761665/8260113
这里还有一点需要注意,大家可以看到下面的这张图片:
我用蓝色框出的部分是自己实现的,而红色的部分可以直接放到自己的工程代码就行了,当然还有一些是自己的意愿可有可无的代码。如果你觉得麻烦,还可以自己打成一个jar包,直接放到自己的工程即可。
0 0
- Android中关于APK文件的下载、安装和卸载
- Android模拟器中APK文件的安装和卸载方法
- Android代码实现APK的下载安装和卸载<1>
- Android代码实现APK的下载安装和卸载<2>
- Android对APK文件的安装和卸载
- 安装和卸载apk文件的方法
- android 安装和卸载apk
- Android模拟器中安装与卸载apk文件
- 安装|卸载apk文件在Android仿真器中
- Android apk下载 安装 卸载 打开
- Android apk的安装、卸载
- 关于 android apk安装 更新 卸载的几个问题
- apk的安装和卸载
- apk的安装和卸载
- Android代码实现APK文件的安装与卸载
- ANDROID代码实现APK文件的安装与卸载
- Android代码实现APK文件的安装与卸载
- Android代码实现APK文件的安装与卸载
- 第5章 初始化与清理
- 不论什么事都不要指望别人
- Cinema4D 平面图形建模
- iptables 入门
- 数据结构之链表
- Android中关于APK文件的下载、安装和卸载
- ORACLE触发器详解
- OC--类与对象
- 第16周 oj题目问题 C: 相同的数字!
- JAVA多线程简单实现方法
- 【POJ2104】K-th Number 主席树?函数式线段树?可持久化线段树?……反正是其中一个
- Arcgis for Js之鼠标经过显示对象名的实现
- 下载Android 5.0源码(附源码)
- linux 查看linux版本