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

使用工具: 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. org.apache.catalina.webresources.Cache.getResource Unable to add the resource

    org.apache.catalina.webresources.Cache.getResource Unable to add the resource at xxx to the cache be ...

  2. 自己不懂的SQL语句用法

    left  join:是SQL语言中的查询类型,即连接查询.它的全称为左外连接,是外连接的一种. 连接通常可以在select语句的from子句或where子句中建立,其语法格式为: select  c ...

  3. JSON简介

    JSON的全称是JavaScript  Object  Notion,即JavaScript对象符号,它是一种轻量级的数据交换格式,JSON的数据格式既适合人来读/写,也适合计算机本身解析和生成.最早 ...

  4. Strategy pattern策略模式

    在Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator,或者创建比较器传入Collections的静态方法中作为方法参数,进行比较排序等,使用的是策略模式. 一.策略模式的定义 ...

  5. Mysql 服务在本机,需要单机调试Mysql数据库 发生 不认识hostname‘localhost’

    今天在本机安装Mysql Server然后用Workbench打开,连接本机数据库 hostname:localhost port:3306 弹出:localhost 不能连接 错误-1042 尝试了 ...

  6. WCF传输图片解决方案

    图片无法序列化后传输,但我们可以将图片转二进制字符串传输.然后在服务端将二进制字符串转图片. 将图片转字符串的例子: private byte[] BmpToJpegBuff(Image img) { ...

  7. 《AngularJS权威教程》中关于指令双向数据绑定的理解

    在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...

  8. 仓储管理系统500bug记录一下mysql 8小时超时解决办法

    HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.TransientDa ...

  9. WPF学习笔记1---初接触

    刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...

  10. 我创建了一个网站,专门分享公众号的文章 https://asyons.com

    网址:https://asyons.com/,为做个网站,自娱自乐的自明星,但投资也挺大的了,注册了一家公司,公财私章,做账报税,阿里云服务器,全职开发.算上时间价值,按小时,投资过5万了.