首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android7.0迁移-访问android_asset文件夹时处理FileUriExposedException

在Android 7.0及以上版本中,访问android_asset文件夹时可能会出现FileUriExposedException异常。这是由于Android 7.0引入了一项安全机制,禁止应用使用file:// URI暴露文件给其他应用。

为了解决这个问题,可以采取以下几种方法:

  1. 使用ContentProvider:将要访问的文件通过ContentProvider暴露给其他应用。这样可以确保文件的安全性,并且符合Android 7.0及以上版本的要求。你可以创建一个自定义的ContentProvider,然后在其中实现对android_asset文件夹的访问。
  2. 使用FileProvider:FileProvider是Android提供的一种特殊的ContentProvider,用于共享文件。通过配置FileProvider,你可以安全地共享android_asset文件夹中的文件给其他应用。你需要在AndroidManifest.xml文件中声明FileProvider,并配置文件的访问权限。
  3. 使用AssetManager:如果你只是需要读取android_asset文件夹中的文件内容,可以使用AssetManager类来实现。AssetManager提供了一系列方法用于读取assets目录下的文件,可以通过open方法打开文件输入流,然后进行读取操作。

总结起来,处理FileUriExposedException异常的方法有三种:使用ContentProvider、使用FileProvider和使用AssetManager。具体选择哪种方法取决于你的需求和场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android7.0适配心得

因此,在Android7.0中尝试传递 file:// URI 会触发 FileUriExposedException。 应对策略:大家可以通过使用FileProvider来解决这一问题。...COLUMN_LOCAL_FILENAME在Android7.0中被标记为deprecated , 旧版应用在访问 COLUMN_LOCAL_FILENAME时可能出现无法访问的路径。...在Android7.0上使用上述方式调用系统相拍照会抛出如下异常: android.os.FileUriExposedException: file:////storage/emulated/0/temp...Android7.0通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。...由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。 以上是,我在Android7.0上适配上的一些心得,小伙伴们如果有遇到问题可以在下方留言。

1.4K50
  • android共享文件夹_安卓多用户共享文件

    如果一项包含文件 URI 的 Intent 离开您的应用,应用会停止运行,并出现 FileUriExposedException异常。...官方文档在Android 7.0 行为变更进行了详细说明 android.os.FileUriExposedException: file:///storage/emulated/0/Download...resource:自定义的xml文件(下面会介绍) 2、在res目录下新建一个xml文件夹,并且新建一个file_paths的xml文件(如下图) 3、打开file_paths.xml文件,添加指定的分享目录...com.xuexuan.fileprovider/external/20171201-094017.png 可以看到格式为:content://authorities/paths中name的值/文件的相对路径,即name隐藏了可存储的文件夹路径...行为变更 通过FileProvider在应用间共享文件吧 https://developer.android.com/guide/topics/manifest/provider-element.html Android7.0

    3.6K40

    有一个文件夹下有很多的文件,每一个文件上都有年月日时,现在要根据这个年月日时创建文件夹,并且将这些文件迁移到对应的文件夹下,如何处理

    1 问题 有一个文件夹下有很多的文件,每一个文件上都有年月日时,现在要根据这个年月日时创建文件夹,并且将这些文件迁移到对应的文件夹下,如何处理 Java 遍历一个文件夹,获取到后缀是tar.gz 的压缩包文件...,压缩包的名称是TR_2023060200.tar.gz,然后获取到2023060200这个格式的,在当前目录下生成这个时间文件夹,然后将对应的压缩包迁移进去这个新建的时间文件夹 2 实现 public...//File file = new File("D:\\059\\data\\RAIN_GRIB"); String folderPath = "D:\\source"; // 文件夹路径

    18310

    WebView深度学习(一)之WebView的基本使用以及Android和js的交互

    就必须销毁Webview //但是注意:webview调用destory时,webview仍绑定在Activity上 //这是由于自定义webview构建时传入了该Activity的context对象...Webview.clearCache(true); //清除当前webview访问的历史记录 //只会webview访问历史记录里的所有记录除了当前访问记录 Webview.clearHistory(...步骤1:将需要调用的JS代码以.html格式放到 src/main/assets 文件夹里 需要加载JS代码:javascript.html 文件夹里 以下是需要加载JS代码:javascript.html <!...1.在JS约定所需要的Url协议 这里的示例用的是本地的html代码,放到src/main/assets文件夹里,文件名为javascript.html。开发中肯定是从服务器获取对应资源。 <!

    6.3K31

    Android开发笔记(一百七十六)借助FileProvider发送彩信

    开始,系统不允许其他应用直接访问老格式的路径,必须使用文件提供器FileProvider才能获取合法的Uri路径,相当于A应用申明共享某个文件,然后B应用方可访问该共享文件。...首先在res目录新建xml文件夹,并在该文件夹中创建file_paths.xml,再往xml文件填入以下内容,表示定义几个外部文件目录: Android7.0,把访问文件的Uri方式改为FileProvider --> <provider android:name="androidx.core.content.FileProvider...回到页面的活动源码,在发送彩信之前添加下述代码,目的是根据字符串路径构建Uri对象,注意针对Android7.0以上的兼容处理。...Uri uri = Uri.parse(path); // 根据指定路径创建一个Uri对象 // 兼容Android7.0,把访问文件的Uri方式改为FileProvider if (Build.VERSION.SDK_INT

    72020

    从TargetApi22升级到TargetApi26注意事项

    ,但仅当试图使用权限的应用程序由与定义权限的应用程序相同的证书签名时。...,下面5种类型的type将会被废弃,不能使用,但运行在低于api26版本的手机上还是可以使用以下的type,所以需要对api26的悬浮窗进行兼容处理: TYPE_PHONE TYPE_PRIORITY_PHONE...MODE_WORLD_WRITEABLE:该文件的内容可被其他程序读、写 3.App对外无法暴露file://类型的URI 如果你使用Intent携带这样的URI去打开外部App(比如:打开系统相机拍照),那么会抛出FileUriExposedException...COLUMN_LOCAL_FILENAME在Android7.0中被标记为deprecated , 旧版应用在访问 COLUMN_LOCAL_FILENAME时可能出现无法访问的路径。...面向 Android N 或更高版本的应用在尝试访问 COLUMN_LOCAL_FILENAME 时会触发 SecurityException。

    86210

    Carson带你学Android:你要的WebView与 JS 交互方式都在这里了

    实例介绍:点击Android按钮,即调用WebView JS(文本名为javascript)中callJS() 具体使用: 步骤1:将需要调用的JS代码以.html格式放到src/main/assets文件夹里...为了方便展示,本文是采用Andorid调用本地JS代码说明; 实际情况时,Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可 需要加载JS代码:javascript.html...,所以需要支持js对话框 // webview只是载体,内容的渲染需要使用webviewChromClient类去实现 // 通过设置WebChromeClient对象处理...System.out.println("JS调用了Android的hello方法"); } } 步骤2:将需要调用的JS代码以.html格式放到src/main/assets文件夹里...就调用相应方法 即JS需要调用Android的方法 具体使用: 步骤1:在JS约定所需要的Url协议 JS代码:javascript.html 以.html格式放到src/main/assets文件夹里

    90120

    Android:你要的WebView与 JS 交互方式 都在这里了

    实例介绍:点击Android按钮,即调用WebView JS(文本名为javascript)中callJS() 具体使用: 步骤1:将需要调用的JS代码以.html格式放到src/main/assets文件夹里...为了方便展示,本文是采用Andorid调用本地JS代码说明; 实际情况时,Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可 需要加载JS代码:javascript.html...,所以需要支持js对话框 // webview只是载体,内容的渲染需要使用webviewChromClient类去实现 // 通过设置WebChromeClient对象处理...System.out.println("JS调用了Android的hello方法"); } } 步骤2:将需要调用的JS代码以.html格式放到src/main/assets文件夹里...即JS需要调用Android的方法 具体使用: 步骤1:在JS约定所需要的Url协议 JS代码:javascript.html 以.html格式放到src/main/assets文件夹里

    7K31

    FileProvider你了解多少?透过FileProvider来看看四大组件之一ContentProvider!

    在Android7.0,Android提高了应用的隐私权,限制了在应用间共享文件。如果需要在应用间共享,需要授予要访问的URI临时访问权限。...如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。...这主要为了保护应用隐私,如果设置为true,那么任何一个应用都可以来访问当前应用的FileProvider了,对于应用文件来说不是很可取,所以Android7.0以上会通过其他方式让外部应用安全的访问到这个文件...也正是因为这个属性为true,在Android7.0以下,Android默认是将它当成一个普通的ContentProvider,外部无法通过content:// URI来访问文件。...Java 高级(★★) Android 基础(★★★) Android 高级(★★★) Android 项目(★★★) 项目面试常见问题(★★★) 一、Java 基础(★★) 面向对象思想 多态 异常处理

    83500

    Android 编译Android7.0版本源码

    编译Android7.0版本源码 前言   首先说说为什么要编译Android7.0的源码,因为当我们去做系统定制开发的时候,就需要这么去做,举个例子,你们公司有一个客户是做电视机顶盒的,现在购买了你们公司的产品...首先在根目录下创建一个bin目录,输入命令: mkdir ~/bin 然后添加路径,输入命令: PATH=~/bin:$PATH 下载Repo工具,这里有两个地址,第一个是Google官方的,可能国内访问没有那么顺利...,输入命令: mkdir Project 回车即可创建文件夹,然后进入到Project文件夹下,输入命令: cd Project 回车进入到Project下,再创建一个Android7的文件夹,输入命令...m 可以使用 -jN 参数处理并行任务。如果您没有提供 -j 参数,构建系统会自动选择您认为最适合您系统的并行任务计数。...Communication error with Jack server (35), try ‘jack-diagnose’ or see Jack server log   在启动Jack-Server时提示这个错误

    46840

    你可能还不知道的apk签名绕过方法

    下面也将以自己应用方式演示 2.具体使用过程 (1)生成apk文件并安装 自己的应用,在Android7.0以下手机测试时,直接生成apk即可,不需额外操作。...(注意,当gradle plugin在2.2及以上时,自动采用了v1+v2的混合方式。...在apk文件的META-INF文件夹.sf文件中开头有X-Android-APK-Signed: 2,表明是使用了v1+v2签名,没有则是v1签名。...该漏洞可以绕过签名校验的两个条件: (1)应用apk(v1签名)安装时的签名校验,是解压apk,执行文件和目录的校验;未在zip目录中的数据不做处理 (2)应用执行时,虚拟机可直接执行Dex文件和apk...单纯的v2的签名在Android7.0以下是不支持的。 (如果android7.0以下的系统没有升级安全补丁,那么即使采用v1+v2的混合签名也是没有意义的。)

    3.3K10

    Android各版本迭代信息集合

    要继续使用 Apache HTTP API,您必须先在 build.gradle 文件中声明以下编译时依赖项: android {useLibrary 'org.apache.http.legacy'}...Android 7.0 Android 7.0 引入一项新的应用签名方案 APK Signature Scheme v2 Toast导致的BadTokenException 在Android7.0系统上...如果一项包含文件 file:// URI类型 的 Intent 离开你的应用,应用失败,并出现 FileUriExposedException 异常,如调用系统相机拍照录制视频,或裁切照片。...这一点其实就是限制了在应用间共享文件,如果需要在应用间共享,需要授予要访问的URI临时访问权限,我们要做的就是注册FileProvider: 1)声明FileProvider。...我们的处理办法就是要么去掉设置方向的代码,要么舍弃透明效果。 Android9.0 在9.0中默认情况下启用网络传输层安全协议 (TLS),默认情况下已停用明文支持。

    1.2K20

    Python 爬虫时,高版本 App 如何进行抓包?

    这其中的原因是,从 Android 7.0 开始,默认的网络安全性配置修改了 解决方法如下: 现象:android7.0 以上的手机 https 抓包失败(安装了 https 证书也不行) 原因:android7.0... 重新打包项目,然后抓包,即可成功 Webview 抓包失败 上面可以解决 Android 原生抓包问题,但在 Android7.0 以上的手机,开着网络代理访问不了...注释是为了忽略掉父类的处理,默认执行下去。 警告 这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置,不然 APP 会面临被他人抓包的风险。...trust-anchors> 网上有些解决方式是将 Charles 和 Fiddler 的证书添加到 raw 文件夹下的方式也可以...SslErrorHandler handler, SslError error) { // 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载

    2.1K10

    【Android开发进阶系列,整理】Android与h5交互专题

    交互原理 1.1 webview如何加载H5页面         我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同: *//加载assets文件夹下的...test.html页面,文件截图如图1* mWebView.loadUrl("file:///android_asset/test.html"); *//加载网页* mWebView.loadUrl("...势必要传入一个字符串,当传入固定字符串时,用单引号括起来即可;当传入变量名时,需要用到转义符(这里我也是花费半个小时才搞懂的,嘿嘿)。...①.Java调用js代码 String call = "javascript: sumToJava(1, 2)"; webView.loadUrl(call); ②.js函数处理,并将结果通过调用java...void onSumResult(int result) {   Log.i(LOGTAG, "onSumResult result="+ result); } 5、加载本地assets里的H5界面,要写成android_asset

    96140

    细数Android7.0 Nougat的几大安全增强功能

    2016年8月22日,Google开始正式向用户推送Android7.0 Nougat正式版。 在性能方面,AndroidN不仅对编译器进行了优化,而且还在图形处理方面做了更新。...反正国人所使用的大多数Android设备都不会第一时间收到Google的更新推送,而且Android操作系统的实际更新迭代速度确实太慢,所以这并不是什么值得我们期待的功能。...Android7.0 Nougat更新了设备底层的加密处理机制,并且大幅减少了设备的启动时间,提升了手机的重启速度。现在,手机中类似电话app和闹钟这样的应用会在你输入密码之前就启动完成了。...像Nexus5X和6P这样的设备会使用单独的密钥,而这些密钥只能通过受信任的硬件来访问,例如ARMTrustZone。...从Nougat(Android7.0)开始,所有的新设备不仅必须要提供对密钥存储的硬件支持,而且还要在这些密钥被使用之前,即当用户解锁设备时,提供防止暴力破解的安全保护。

    1.1K60
    领券