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

使用工具: 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. angularJs,ionic字符串操作

    1.首先我们需要把一段"文本或字符串"中的我们想进行操作的"字符串","字"筛选出来,代码如下: app.filter('replaceCo ...

  2. struts2+spring+hibernte整合示例

    简单实现添加用户功能,仅供初学者参考,可自行扩展程序功能(增删改查). 这里贴下代码,需要的可以下载看(因为比较懒). applicationContext.xml <?xml version= ...

  3. Eclipse快捷键汇总

    [ALT+/] 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ALT+/]快捷键带来的好处吧. 2 [Ctrl+O] ...

  4. Android ORM应用开发框架KJFrameForAndroid使用详解

    本文将为大家介绍一款Android ORM应用开发框架KJFrameForAndroid,很多时候我们也叫它KJLibrary. KJFrameForAndroid简介 KJFrameForAndro ...

  5. Scipy学习笔记 矩阵计算

    Scipy学习笔记 非本人原创  原链接 http://blog.sina.com.cn/s/blog_70586e000100moen.html 1.逆矩阵的求解 >>>impor ...

  6. Tomcat配置错误导致Quartz执行两次问题

    以下基于tomcat服务器 我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http:/ ...

  7. java多线程之 基本概念

    一.线程的五种状态 1. 新建状态(New)         : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable) ...

  8. Read Excel file from C#

    Common way is: var fileName = string.Format("{0}\\fileNameHere", Directory.GetCurrentDirec ...

  9. 关于mongoldb 启动时显示 add already in use

    1 .不要在国内网上查找 浪费时间 2. stack over flow 是个不错的选择 进入正题. 终端输入: ps wuax | grep mongo 会看到: 随后:kill 447

  10. a primary example for Functional programming in javascript

    background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...