Android N及以上版本应用安装包下载完成自动弹出安装界面的适配方法

  在实现下载和安装APP功能的时候在Android较高版本可能会遇到如下的问题:

  • 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/*.apk exposed beyond app through Intent.getData();
  • 弹不出安装界面。

  上面遇到的这两个问题主要是Android 8.0针对未知来源应用做了权限限制,针对该问题的解决及完整适配方法如下。

完整适配步骤

1、适配Android 8.0及以上系统,需要在AndroidManifest.xml中添加安装权限:

  Android O及Android 8.0及以上系统若不加该权限,会遇到跳转到安装界面时闪退的问题,原因是8.0针对未知来源应用,在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。
2、在AndroidManifest.xml中添加provider声明:

            

3、在res目录下新建一个名为xml的目录,并在xml目录下新建一个名为file_paths.xml的文件;
4、在file_paths.xml的文件中添加如下代码:

<?xml version="1.0" encoding="utf-8"?>            

5、适配Android N弹出安装界面的代码:

private void isAPK(String filePath) {    File file = new File(filePath);    if (file.getName().endsWith(".apk")) {        try {            Intent intent = new Intent(Intent.ACTION_VIEW);            Uri uri;            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // 适配Android 7系统版本                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件                uri = FileProvider.getUriForFile(XRetrofitApp.getApplication(), XRetrofitApp.getApplication().getPackageName() + ".fileprovider", file);//通过FileProvider创建一个content类型的Uri            } else {                uri = Uri.fromFile(file);            }            intent.setDataAndType(uri, "application/vnd.android.package-archive"); // 对应apk类型            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            XRetrofitApp.getApplication().startActivity(intent);        } catch (Exception e) {            e.printStackTrace();        }    }}

PS:下载完文件,可以通过发送扫描广播,告诉系统扫描数据库及时刷新文档里面的文件,这样即使下载安装出错,还可以进入文档查看安装应用包,代码如下:

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);//根据需要自定义IMG_PATH路径Uri uri = Uri.fromFile(new File(downLoadPath + java.io.File.separator));intent.setData(uri);context.sendBroadcast(intent);

更多相关文章

  1. 混淆编译
  2. Android(安卓)Studio安装及环境配置笔记
  3. Android(安卓)studio DDMS无法导入导出文件的问题
  4. [Android(安卓)界面] setContentView和inflate区别
  5. Ubuntu 14.04.3上配置并成功编译Android(安卓)6.0 r1源码
  6. Android(安卓)SDK目录解析以及通用文件
  7. MyEclip1se8.5搭建Android环境
  8. Android(安卓)4.0 SDK 环境搭建体验(Windows 7 Ultimate)
  9. 零基础学习教程之Linux下搭建android开发环境

随机推荐

  1. Android(安卓)int颜色值和rgba颜色互转
  2. Android中通过其他APP启动Activity的四种
  3. 史上最全的android开发资料大集合
  4. Android多渠道打包修改资源文件
  5. Android(安卓)Design Support Library使
  6. android网格连接
  7. Android(安卓)7.1 设置不支持遥控操作?
  8. 安卓按钮有按下去的效果的实现方法
  9. Android中Media Framework浅析(二)——Medi
  10. Android之如何解决右上角不显示3个点的菜