首页 > 其他分享 >android S 上 安装apk出现android.os.FileUriExposedException

android S 上 安装apk出现android.os.FileUriExposedException

时间:2023-04-13 17:49:08浏览次数:51  
标签:xml apk FileUriExposedException file intent android os

报错:

android.os.FileUriExposedException: file:///data/user/0/com.example.overlay.   exposed beyond app through Intent.getData()

原因:

andorid7.0系统以后,引入“私有目录被限制访问”,“StrictMode API 政策”导致的问题。解决办法很简单。就是用新的方式获取uri。

” StrictMode API 政策” 是指禁止向你的应用外公开 file:// URI。 如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常。

解决方法

1.在AndroidManifest.xml中添加如下代码

<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.example.overlay.idea.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

注意事项:
authorities:app的包名.fileProvider
grantUriPermissions:必须是true,表示授予 URI 临时访问权限 
exported:必须是false 为true则会报安全异常。
resource:中的@xml/file_paths是我们接下来要添加的文件

2、在res目录下新建一个xml文件夹,并且新建一个file_paths的xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <root-path path="/data/user/0/com.example.overlay.idea/cache/" name="files_root" />
    <root-path path="." name="external_storage_root" />
</paths>

path:需要临时授权访问的路径(.代表所有路径)
name:访问路径名字

 

 

 

3.修改代码适配Android N

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            Log.e(TAG, "installAPk: " + apkFile.getAbsolutePath());
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            Uri contentUri = FileProvider.getUriForFile(this, "com.example.overlay.idea.fileprovider",apkFile);
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);

(308条消息) android安装apk出现android.os.FileUriExposedException_android.os.fileuriexposedexception: file:///storag_冬瓜去哪儿的博客-CSDN博客

Failed to find configured root that contains的解决办法不知道这里能帮到你吗 - 简书 (jianshu.io)

标签:xml,apk,FileUriExposedException,file,intent,android,os
From: https://www.cnblogs.com/wanglongjiang/p/17315789.html

相关文章

  • adb命令获取android app FPS 执行命令后只出现一行16666666的解决方案
    一、问题描述使用命令command='adbshelldumpsysSurfaceFlinger--latency{}/{}#0'.format(package_name,activity)获取androidapp的fps数据,执行命令后街股票打印如下:  二、问题分析1、刚开始以为是命令里面的SurfaceView写的有问题,执行命令adbshelldumpsys......
  • Android性能优化之APK瘦身
    结构分析首先上传一张瘦身前通过Analyzeapp分析出来的图片(打开方式:AndroidStudio下——>Build——>Analyzeapp):imageAPK包结构如下:lib/:包含特定于处理器软件层的编译代码。该目录包含了每种平台的子目录,像armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,和mips。大多数情况......
  • Android开发startActivityForResult()弃用,推荐使用registerForActivityResult()方法
    SecondActivity中publicclassSecondActivityextendsAppCompatActivity{privatestaticfinalStringTAG="SecondActivity";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);......
  • Android技术分享 | 一行代码实现屏幕、声音采集
    之前发布过一行代码实现安卓屏幕采集编码,并介绍了如何屏幕采集编码并进行了封装,简单的调用即可实现MediaProjection权限申请、H264硬编码、错误处理等功能。本文将介绍新增的功能,还是只需一行代码即可实现屏幕、声音采集。一行代码实现屏幕采集编码之前的文章,我们已经介绍过如何......
  • android AsyncTask
    在Android中每一个应用都拥有自己的独立进程,而一个进程可以拥有多个线程,在这些线程中有一个线程叫做MainThread(也叫UIThread).它负责显示、更新UI,与用户交互.其他的线程叫做WorkerThread(也叫工作线程),由于在主线程中做耗时的操作会阻塞主线程,影响UI更新,会让用户感觉到应......
  • 查看xxx.apk文件的AndroidManifest.xml操作步骤:
    查看xxx.apk文件的AndroidManifest.xml操作步骤: 1.使用7.zip打开xxx.apk文件,且将该文件夹中的AndroidManifest.xml文件复制出来。 2、AndroidManifest.xml文件复制到AXMLPrinter2文件夹中。 3、在AXMLPrinter2文件夹输入cmd进入命令行模式。 4、输入java-jarAXMLPrinter2.jarAn......
  • android: 平台版本对应api及占比统计(android studio 2022.1.1)
    一,查看平台版本对应的api官方文档地址:https://developer.android.google.cn/guide/topics/manifest/uses-sdk-element.html?utm_campaign=adp_series_sdkversion_010616&utm_source=medium&utm_medium=blog&hl=zh-cn#ApiLevels如图: 二,查看各版本的支持比率:启动androi......
  • Android sqlite 数据库查询,插入,删除,更新demo<第1章>
    //20140424创建数据库帮助类DataBaseHelper,继承SQLiteOpenHelper, 1. 编写构造函数,实现数据库创建;publicstaticfinalStringTAG="ListViewActivity";privatestaticintVERSION=1;privatestaticfinalStringTABLE_NAME="user1";privatestaticfinalSt......
  • Android App状态栏变色:ColorfulStatusBar
    适用于版本大于等于19以上。importandroid.annotation.TargetApi;importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.Color;importandroid.os.Build;importandroid.view.View;importandroid.view.ViewGroup;......
  • Android动态设置drawableRight
    DrawablerightDrawable=getResources().getDrawable(R.drawable.icon);//调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示rightDrawable.setBounds(0,0,rightDrawable.getMinimumWidth(),rightDrawable.getMinimumHeight());//left,top,r......