应用场景:在检查版本更新的时候经常需要从服务器端下载然后安装到手机中

使用工具: 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中下载、安装和卸载(原)的更多相关文章

  1. Inno Setup 安装前卸载原程序

    Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是 ...

  2. 2018年Unity结合Android SDK下载安装及配置教程

    原文:2018年Unity结合Android SDK下载安装及配置教程 首先声明: Unity版本2017.1f3        最近试着在Unity中利用网易做AR开发时,发布项目文件需要发布到An ...

  3. win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结

    win10操作系统下oracle11g客户端/服务端的下载安装配置卸载总结 一:前提 注意:现在有两种安装的方式 1. oracle11g服务端(64位)+oracle客户端(32位)+plsql(3 ...

  4. 在Centos中yum安装和卸载软件的使用方法(转)

    在Centos中yum安装和卸载软件的使用方法 安装方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软 ...

  5. 在Centos中yum安装和卸载软件的使用方法(转载)

    转自: http://gzmaster.blog.51cto.com/299556/72278 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. ...

  6. Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

    一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...

  7. android 实现静默安装、卸载

    方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...

  8. Android中APK安装过程及原理解析

    [原文] 来自华为内部资料 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作.APK是Android Package的缩写,即android安装包 ...

  9. Android实现静默安装与卸载

    一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装. 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方 ...

随机推荐

  1. redis集群报错

    写入redis集群报错:(error) MOVED 6918 解决方法:redis-cli -c -p 7001 -h 10.0.0.104

  2. NoSQl简介(转)

    NoSQL,全称是“Not Only Sql”,指的是非关系型的数据库.这类数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的.原始的目的是为了大规模web应用,这场全新的数据库革命运动 ...

  3. hdoj 5139Formula

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5139 展开后的:1!*2!*3!*..*n! 后面就好办了- -

  4. D2.Reactjs 操作事件、状态改变、路由

    下面内容代码使用ES6语法 一.组件的操作事件: 1.先要在组件类定义内定义操作事件的方法,如同event handler.若我需要监听在组件内的Button的点击事件onClick,首先定义监听方法 ...

  5. IOS UIButton用法详解

    这段代码动态的创建了一个UIButton,并且把相关常用的属性都列举了.希望对大家有用.   //这里创建一个圆角矩形的按钮UIButton *button1 = [UIButton buttonWi ...

  6. 不安装HALCON下安装运行版U盘加密狗驱动

    参考halcon安装指导书 Installation Guide Depending on your operating system, you can install, configure, and ...

  7. Unhandled exception at 0x........ in XXXX.exe: 0xC0000005:错误

    对于C++初学者或粗心者,很容易犯如下图所示错误:     那么该错误是由什么造成的呢?   答案无疑只有一个,即:读取了本该没有的值或者地址.   那么如何解决呢?   第一件事,检查下你传入的参数 ...

  8. Tomcat批处理文件小结

    Tomcat批处理文件小结 一:嗯,如果你不了解Windows批处理文件,并且想了解一下,请先参看下面的链接资源(我也是因为想了解一下Windows批处理文件是用什么写的?怎么写的?才在园中找的,下面 ...

  9. 使用CSS3动画属性实现360°无限循环旋转【代码片段】

    使用CSS3的animation动画属性实现360°无限循环旋转. 代码片段: <div id="test"> <img src="/CSS3/img/ ...

  10. git学习心得总结

    最近学习git,应为git可以不需要服务器而在任意的Linux机器上管理代码,相对svn和cvs还是有它的优势的,所以我选用了git来管理我的小项目,以后在提供svn的管理. 在使用了一段时间后想写一 ...