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

使用工具: XUtils,这个开源的框架真的是需要花大把时间去阅读和理解的,十分有用的,on the way ! fighting!

下载:github中关键字搜索即可download

 

  1. //google提供的保留地址,不会随着电脑ip地址的变化而改变测试ip地址
  2. private static final String mDownloadUrl= "http://10.0.2.2:8080/xxx.apk";
  3.  
  4. protected void downloadApk() {
  5.  
  6. if (Environment.getExternalStorageState().equals(
  7. Environment.MEDIA_MOUNTED)) {
  8.         //下载apk到sd的路径
  9. String sdPath = Environment.getExternalStorageDirectory()
  10. .getAbsolutePath() + File.separator + "xxx.apk";
  11. HttpUtils httpUtils = new HttpUtils();
  12.  
  13. httpUtils.download(mDownloadUrl, sdPath,
  14. new RequestCallBack<File>() {
  15.  
  16. @Override
  17. public void onStart() {
  18. Log.i(tag, "开始下载");
  19. super.onStart();
  20. }
  21.  
  22. @Override
  23. public void onLoading(long total, long current,
  24. boolean isUploading) {
  25. Log.i(tag, "正在下载中");
  26. Log.i(tag, "total = " + total);
  27. Log.i(tag, "current = " + current);
  28. super.onLoading(total, current, isUploading);
  29. }
  30.  
  31. @Override
  32. public void onSuccess(ResponseInfo<File> responseInfo) {
  33. Log.i(tag, "下载完成");
  34. //获取下载好的文件路径
  35. File file = responseInfo.result;
  36.                 //安装apk
  37. installApk(file);
  38.  
  39. }
  40.  
  41. @Override
  42. public void onFailure(HttpException error, String msg) {
  43. Log.i(tag, "下载失败");
  44. }
  45.  
  46. });
  47. }
  48. }

通过隐式意图去实现下载

  通过查询源码把下面代码抠出来

  1. /*
  2. * <intent-filter> <action android:name="android.intent.action.VIEW" />
  3. * <category android:name="android.intent.category.DEFAULT" />
    * <data android:scheme="content" /> <data android:scheme="file" />
    * <data android:mimeType="application/vnd.android.package-archive" />
  4. * </intent-filter>
  5. */

 然后就是一个简单的隐式意图开启Activity的过程

  1. protected void installApk(File file) {
  2. Intent intent = new Intent();
  3. intent.setAction("android.intent.action.VIEW");
  4. intent.addCategory("android.intent.category.DEFAULT");
  5. /*
  6. * intent.setData(Uri.fromFile(file));
  7. * intent.setType("application/vnd.android.package-archive");
  8. */
              //与被注释代码等价,但推荐使用下述方法,被注释方法存在一个finish问题
  9. intent.setDataAndType(Uri.fromFile(file),
  10. "application/vnd.android.package-archive");
  11.  
  12. startActivity(intent);
  13. }

 //卸载应用的方法同上,找到对应的源码,查看安卓系统是怎么实现的

  1. <intent-filter>
  2. <action android:name="android.intent.action.VIEW" />
  3. <action android:name="android.intent.action.DELETE" />
  4. <category android:name="android.intent.category.DEFAULT" />
  5. <data android:scheme="package" />
  6. </intent-filter>

//同上,开启意图即可

  1. protected void uninstall(){
  2. Intent intent = new Intent();
  3. intent.setAction(Intent.ACTION_DELETE);
         intent.addCategory("android.intent.category.DEFAULT");
  4. intent.setData(Uri.parse("package:"+包名));
  5. startActivity(intent);
  6. }

  

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. js调用.net后台事件、后台调用前台以及js调用服务器控件

    1. javaScript函数中执行C#代码中的函数: 方法一:间接触发后台代码 1.首先建立一个服务端控件按钮命名为btn1,双击进入后台将调用或处理的内容写入btn1_click中; 2.在前台写 ...

  2. MSDN Library for vs 2010安装及使用(MSDN Library)

    VS2010正式版不再有单独的MSDN Library安装选项,VS2010的ISO安装光盘里已经包含有MSDN Library,只不过要手动安装,方法如下: 1.安装完VS2010后,在开始菜单中打 ...

  3. python网络编程【一】

    TCP/IP 是标准的协议,它可以使用世界范围内的计算机通过Internet或本地的网络通信 1.编写一个TCP客户端程序 #!/usr/bin/env python import socket, s ...

  4. NOIP 2015 游记

    本来和zly和wxh约好了 高三一起再来玩一次复赛,结果最终只有我一个人来了说...貌似是年段主任不让去...总算见识了比我们学校的YSD更爱管闲事的年段主任. 今年比赛竟然在衢州二中,学校不大,但感 ...

  5. 【67测试20161116】【数论】【DP】【思维】

    第一题: LGTB 得到了一个序列,他想在这个序列中选择一个最长的连续子序列,使得这个子序列的最大公约数等于1.请告诉他他能得到的最大长度,如果没有这样的序列,输出-1. 对于50% 的数据,1 &l ...

  6. 模具厂MES项目介绍

    开发工具:Microsoft Visual Studio 2012 数据库:     Oracle 开发语言:C#(4.0) 版本控制工具:TortoiseSVN 底层ORM框架:IBatisNet ...

  7. 《JavaScript高级程序设计》读书笔记--(2)基本概念

    变量 Javascript 是区分大小写的, 也就是说 var nun 与 var Num 是不同的变量. ECMAScript的变量是松散类型的,所谓松散类型就是可以保存任何类型的数据.ECMASc ...

  8. Crowd 2.7汉化中文包(原创首发)

    介绍:Crowd是用来集成Atlassian各类产品用户集成系统,如Jira,Confluence等的集中用户管理平台.可对组.成员关系.用户.目录.应用程序及权限进行综合管理,并可实现其他程序的单点 ...

  9. C语言-预估校正法求常微分方程

    #include<stdio.h> #include<math.h> #define n 14 int main(){ double a = 0.0, b = 1.4,h,m= ...

  10. sqlServer数据库插入数据后返回刚插入记录的自增ID

    insert into tabls1(row1,row1) values('0','0') select @@IDENTITY