Android中下载、安装和卸载(原)
应用场景:在检查版本更新的时候经常需要从服务器端下载然后安装到手机中
使用工具: XUtils,这个开源的框架真的是需要花大把时间去阅读和理解的,十分有用的,on the way ! fighting!
下载:github中关键字搜索即可download
- //google提供的保留地址,不会随着电脑ip地址的变化而改变测试ip地址
- private static final String mDownloadUrl= "http://10.0.2.2:8080/xxx.apk";
- protected void downloadApk() {
- if (Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)) {
- //下载apk到sd的路径
- String sdPath = Environment.getExternalStorageDirectory()
- .getAbsolutePath() + File.separator + "xxx.apk";
- HttpUtils httpUtils = new HttpUtils();
- httpUtils.download(mDownloadUrl, sdPath,
- new RequestCallBack<File>() {
- @Override
- public void onStart() {
- Log.i(tag, "开始下载");
- super.onStart();
- }
- @Override
- public void onLoading(long total, long current,
- boolean isUploading) {
- Log.i(tag, "正在下载中");
- Log.i(tag, "total = " + total);
- Log.i(tag, "current = " + current);
- super.onLoading(total, current, isUploading);
- }
- @Override
- public void onSuccess(ResponseInfo<File> responseInfo) {
- Log.i(tag, "下载完成");
- //获取下载好的文件路径
- File file = responseInfo.result;
- //安装apk
- installApk(file);
- }
- @Override
- public void onFailure(HttpException error, String msg) {
- Log.i(tag, "下载失败");
- }
- });
- }
- }
通过隐式意图去实现下载
通过查询源码把下面代码抠出来
- /*
- * <intent-filter> <action android:name="android.intent.action.VIEW" />
- * <category android:name="android.intent.category.DEFAULT" />
* <data android:scheme="content" /> <data android:scheme="file" />
* <data android:mimeType="application/vnd.android.package-archive" />- * </intent-filter>
- */
然后就是一个简单的隐式意图开启Activity的过程
- protected void installApk(File file) {
- Intent intent = new Intent();
- intent.setAction("android.intent.action.VIEW");
- intent.addCategory("android.intent.category.DEFAULT");
- /*
- * intent.setData(Uri.fromFile(file));
- * intent.setType("application/vnd.android.package-archive");
- */
//与被注释代码等价,但推荐使用下述方法,被注释方法存在一个finish问题- intent.setDataAndType(Uri.fromFile(file),
- "application/vnd.android.package-archive");
- startActivity(intent);
- }
//卸载应用的方法同上,找到对应的源码,查看安卓系统是怎么实现的
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <action android:name="android.intent.action.DELETE" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="package" />
- </intent-filter>
//同上,开启意图即可
- protected void uninstall(){
- Intent intent = new Intent();
- intent.setAction(Intent.ACTION_DELETE);
intent.addCategory("android.intent.category.DEFAULT");- intent.setData(Uri.parse("package:"+包名));
- startActivity(intent);
- }
Android中下载、安装和卸载(原)的更多相关文章
- Inno Setup 安装前卸载原程序
Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是 ...
- 2018年Unity结合Android SDK下载安装及配置教程
原文:2018年Unity结合Android SDK下载安装及配置教程 首先声明: Unity版本2017.1f3 最近试着在Unity中利用网易做AR开发时,发布项目文件需要发布到An ...
- win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结
win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结 一:前提 注意:现在有两种安装的方式 1. oracle11g服务端(64位)+oracle客户端(32位)+plsql(3 ...
- 在Centos中yum安装和卸载软件的使用方法(转)
在Centos中yum安装和卸载软件的使用方法 安装方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软 ...
- 在Centos中yum安装和卸载软件的使用方法(转载)
转自: http://gzmaster.blog.51cto.com/299556/72278 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...
- Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...
- android 实现静默安装、卸载
方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...
- Android中APK安装过程及原理解析
[原文] 来自华为内部资料 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作.APK是Android Package的缩写,即android安装包 ...
- Android实现静默安装与卸载
一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装. 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方 ...
随机推荐
- js调用.net后台事件、后台调用前台以及js调用服务器控件
1. javaScript函数中执行C#代码中的函数: 方法一:间接触发后台代码 1.首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中; 2.在前台写 ...
- MSDN Library for vs 2010安装及使用(MSDN Library)
VS2010正式版不再有单独的MSDN Library安装选项,VS2010的ISO安装光盘里已经包含有MSDN Library,只不过要手动安装,方法如下: 1.安装完VS2010后,在开始菜单中打 ...
- python网络编程【一】
TCP/IP 是标准的协议,它可以使用世界范围内的计算机通过Internet或本地的网络通信 1.编写一个TCP客户端程序 #!/usr/bin/env python import socket, s ...
- NOIP 2015 游记
本来和zly和wxh约好了 高三一起再来玩一次复赛,结果最终只有我一个人来了说...貌似是年段主任不让去...总算见识了比我们学校的YSD更爱管闲事的年段主任. 今年比赛竟然在衢州二中,学校不大,但感 ...
- 【67测试20161116】【数论】【DP】【思维】
第一题: LGTB 得到了一个序列,他想在这个序列中选择一个最长的连续子序列,使得这个子序列的最大公约数等于1.请告诉他他能得到的最大长度,如果没有这样的序列,输出-1. 对于50% 的数据,1 &l ...
- 模具厂MES项目介绍
开发工具:Microsoft Visual Studio 2012 数据库: Oracle 开发语言:C#(4.0) 版本控制工具:TortoiseSVN 底层ORM框架:IBatisNet ...
- 《JavaScript高级程序设计》读书笔记--(2)基本概念
变量 Javascript 是区分大小写的, 也就是说 var nun 与 var Num 是不同的变量. ECMAScript的变量是松散类型的,所谓松散类型就是可以保存任何类型的数据.ECMASc ...
- Crowd 2.7汉化中文包(原创首发)
介绍:Crowd是用来集成Atlassian各类产品用户集成系统,如Jira,Confluence等的集中用户管理平台.可对组.成员关系.用户.目录.应用程序及权限进行综合管理,并可实现其他程序的单点 ...
- C语言-预估校正法求常微分方程
#include<stdio.h> #include<math.h> #define n 14 int main(){ double a = 0.0, b = 1.4,h,m= ...
- sqlServer数据库插入数据后返回刚插入记录的自增ID
insert into tabls1(row1,row1) values('0','0') select @@IDENTITY