通过DownloadManager来下载APK到本地,下载完成后收到广播再安装APK,可用在软件更新等场合。

添加权限

Activity源码

package com.example.administrator.downloadtest;

import android.app.Activity;

import android.app.DownloadManager;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.webkit.MimeTypeMap;

import android.widget.Button;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button btDownload = (Button) findViewById(R.id.bt_download);

btDownload.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

downloadApk();

}

});

/**注册下载完成广播**/

registerReceiver(downloadCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

}

/**下载APK**/

private void downloadApk() {

String apkUrl = "http://192.168.1.1/downloadtest.apk";

Uri uri = Uri.parse(apkUrl);

DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

DownloadManager.Request request = new DownloadManager.Request(uri);

// 设置允许使用的网络类型,这里是移动网络和wifi都可以

request.setAllowedNetworkTypes(request.NETWORK_MOBILE| request.NETWORK_WIFI);

//设置是否允许漫游

request.setAllowedOverRoaming(false);

//设置文件类型

MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();

String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(apkUrl));

request.setMimeType(mimeString);

//在通知栏中显示

request.setNotificationVisibility(request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

request.setTitle("download...");

request.setVisibleInDownloadsUi(true);

//sdcard目录下的download文件夹

request.setDestinationInExternalPublicDir("/download", "downloadtest.apk");

// 将下载请求放入队列

downloadManager.enqueue(request);

}

private BroadcastReceiver downloadCompleteReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

/**下载完成后安装APK**/

installApk();

}

};

private void installApk() {

Intent i = new Intent(Intent.ACTION_VIEW);

String filePath = "/sdcard/download/downloadtest.apk";

i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");

startActivity(i);

}

}

android 下载apk后如何安装程序,Android下载并安装APK相关推荐

  1. java文件下载做apk安装包下载,当下载类型为.apk时,用手机谷歌浏览器下载完后点击打开不能直接启动安装,而是打开压缩文件管理。

    java文件下载做apk安装包下载,当下载类型为.apk时,用手机谷歌浏览器下载完后点击打开不能直接启动安装,而是打开压缩文件管理. uc浏览器可以正常,自带的谷歌不正常,解决方法为,在下载设置res ...

  2. 计算机系统密码保护,安装程序需要密码、安装程序密码保护的方法

    平时我们使用电脑的过程中,经常需要在网上下载安装一些软件.但是由于大家都懂的原因,现在各大软件厂家疯狂捆绑自己的软件,往往你本来只想安装一款软件,却强行捆绑安装了很多软件,而且还是偷偷在后台安装,导致 ...

  3. 此服务器不支持该安装程序,macOS 提示“不能安装该软件,因为当前无法从软件更新服务器获得” 解决方法...

    原标题:macOS 提示"不能安装该软件,因为当前无法从软件更新服务器获得" 解决方法 有些小伙伴安装苹果开发者工具command line tools时,会提示"不能安 ...

  4. 计算机无法启动安装程序,电脑教程:win10安装程序无法正常启动

    有不少用户反映自己在预约了Win10免费升级版后,因为没等到推送通知,便进行了手动升级,但在升级过程中却提示安装程序无法正常启动,需重启电脑.这该怎么办呢?接下来,小编就向大家分享安装Win10系统时 ...

  5. Wix安装程序中判断是否安装的.net framwork 4.5

    Wix安装程序中判断是否安装的.net framwork 4.5 <PropertyRef Id="NETFRAMEWORK40FULL"/> <Property ...

  6. TomCat卸载之后重新装另一个版本的TomCat安装程序的进度条安装到三分之一显示安装失败!!!!!!!!

    问题:TomCat卸载之后重新装另一个版本的TomCat安装程序的进度条安装到三分之一显示安装失败???? 原因:上一次安装的TomCat莫有卸载干净 解决办法: 方法一:打开命令行,输入regedi ...

  7. android打包apk不能安装程序,Android Studio 打包apk后应用未安装

    本文转载地址 http://blog.csdn.net/sinat_14849739/article/details/76383281 前言 Android 要求所有 APK 必须先使用证书进行数字签 ...

  8. 安装android到u盘安装程序,在u盘内安装android教程

    你们知道在u盘内安装android吗?现在我们可以在u盘内安装安卓系统,虽然非常多人是一无所知,但是小编今天肯定能教会你们在u盘内安装android,下面就让我们看看在u盘内安装安卓系统吧. ●教程第 ...

  9. 如何下载Office365离线安装程序包并手动安装?

    如何下载Office365离线安装包并手动安装? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者 博客:https://blog.51cto.co ...

  10. android 在窗口中启动应用程序,Android中使用am命令实现在命令行启动程序详解

    在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am. usage: am [subcommand] [options] start an Activity: ...

最新文章

  1. py 的 第 20 天
  2. vsftp的安装或升级
  3. LoaderManager使用详解(三)---实现Loaders
  4. Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器
  5. 工作76::一直报400
  6. 陶瓷移动在飞信版C++女程序员
  7. 01背包问题--动规
  8. idea自动整理代码快捷键_MDK进阶使用教程,快捷启动任意软件,自动整理格式化代码,方便代码整理可以很好 的提高效率...
  9. tomcat ajp协议安全限制绕过漏洞_Apache tomcat 文件包含漏洞复现(CVE20201938)
  10. linux系统交叉编译如何打包,构建ARM Linux交叉编译器
  11. 数组的循环及跌送方式
  12. 自媒体文章采集工具,采集多个平台的文章
  13. php获取远程数据,教你如何用php实现LOL数据远程获取
  14. uboot源码修改之支持DM9000
  15. 批量修改图片尺寸,不用ps也可以
  16. 图解SpringMVC工作流程
  17. org.apache.ibatis.builder.IncompleteElementException:Could not find result map cn.lyp.entity.Book
  18. 工业设计公司如何进行家电设计创新?
  19. t检验 显著性检验 significance test
  20. 畜牧业适宜性评价算法

热门文章

  1. 多个版本的BIND DNS软件都存在一个严重漏洞
  2. 各家关节机器人示教器特点
  3. 惠普(HP) LaserJet Pro M1136 MFP 黑白多功能激光一体机 (打印 复印 扫描)驱动安装记录
  4. 软件设计师中级考试,软考
  5. 考计算机初级难不难,初级程序员好考吗_考试难不难_上学吧
  6. 2020-12-02HTML及标签
  7. python 怎么将数字转大写_python 数字转换为大写
  8. 固有模态函数IMF与经验模态分解EMD
  9. 计算机病毒扩散最快的是什么,根据统计,当前计算机病毒扩散最快的途径是( )...
  10. 移动充电宝市场需求的调研报告