首页 > 其他分享 >2023年4月14日

2023年4月14日

时间:2023-04-15 21:47:26浏览次数:45  
标签:target TAG 2023 path Android data FileProvider 14

FileProvider

随着Android版本越来越高,Android官方对用户数据保护力度也越来越大。Android提供FileProvider类来供应用之间共享数据。

如:

<paths xmlns:android="http://schemas.android.com/apk/res/android"><files-path name="my_images" path="images/"/>...
</paths>

FileProvider所支持的几种path类型
从Android官方文档上可以看出FileProvider提供以下几种path类型:

<files-path path="" name="camera_photos" />

该方式提供在应用的内部存储区的文件/子目录的文件。它对应Context.getFilesDir返回的路径:eg:"/data/data/com.jph.simple/files"。

<cache-path name="name" path="path" />

该方式提供在应用的内部存储区的缓存子目录的文件。它对应getCacheDir返回的路径:eg:“/data/data/com.jph.simple/cache”;

<external-path name="name" path="path" />

该方式提供在外部存储区域根目录下的文件。它对应Environment.getExternalStorageDirectory返回的路径:eg:"/storage/emulated/0";

<external-files-path name="name" path="path" />

该方式提供在应用的外部存储区根目录的下的文件。它对应Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)返回的路径。eg:"/storage/emulated/0/Android/data/com.jph.simple/files"。

<external-cache-path name="name" path="path" />

该方式提供在应用的外部缓存区根目录的文件。它对应Context.getExternalCacheDir()返回的路径。eg:"/storage/emulated/0/Android/data/com.jph.simple/cache"。

以上便是Android官方文档上介绍的FileProvider所有支持的所以path类型,这些类型在Android手机内部存储区文件共享是可以行的通的,但对于外置SD卡是不行的,如果你想通过FileProvider.getUriForFile()获取一个外置SD卡的Uri则会报出如下异常:

Caused by- java.lang.IllegalArgumentException- Failed to find configured root that contains
Caused by- java.lang.IllegalArgumentException- Failed to find configured root that contains

FileProvider获取对外置SD卡的支持
从Android官方文档中没有找到FileProvider对外置SD卡的支持的任何说明,下面我们就从FileProvider的源码中找找是否有突破口,在FileProvider的源码源码中发现下面一段代码:

 private static PathStrategy parsePathStrategy(Context context, String authority)...int type;while ((type = in.next()) != END_DOCUMENT) {if (type == START_TAG) {final String tag = in.getName();final String name = in.getAttributeValue(null, ATTR_NAME);String path = in.getAttributeValue(null, ATTR_PATH);File target = null;if (TAG_ROOT_PATH.equals(tag)) {target = buildPath(DEVICE_ROOT, path);} else if (TAG_FILES_PATH.equals(tag)) {target = buildPath(context.getFilesDir(), path);} else if (TAG_CACHE_PATH.equals(tag)) {target = buildPath(context.getCacheDir(), path);} else if (TAG_EXTERNAL.equals(tag)) {target = buildPath(Environment.getExternalStorageDirectory(), path);}if (target != null) {strat.addRoot(name, target);}}}return strat;}```
从上述代码中可以看出FileProvider支持的path类型中有个TAG_ROOT_PATH,它对应的值为root-path,root-path在Android官方文档中是没有提及的,但我们不妨试一下,将FileProvider的path设置成root-path,看能否支持外置SD卡:

标签:target,TAG,2023,path,Android,data,FileProvider,14
From: https://www.cnblogs.com/DREAM2021/p/17321939.html

相关文章

  • 2023年4月15日
    登陆界面<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas......
  • 2023年4月16日
    <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.andr......
  • 2023.4.15——软件工程日报
    所花时间(包括上课):2h代码量(行):0行博客量(篇):1篇今天,上午参加了春季招聘会。我了解到的知识点:1.复习了session和cookie的知识;......
  • kuangbin专题一 简单搜索 罐子(POJ-3414)
    PotsTimeLimit:1000MS MemoryLimit:65536KDescriptionYouaregiventwopots,havingthevolumeofAandBlitersrespectively.Thefollowingoperationscanbeperformed:FILL(i)fillthepoti(1≤i≤2)fromthetap;DROP(i)emptythep......
  • 星起航跨境:卖家在2023年prime活动期间,需要注意的事项
    近日,亚马逊发布公告“是时候为2023年Prime会员日做准备了”,尽管亚马逊还未确定具体的活动日期,但大部分的跨境卖家已经开始为活动做准备了。值得跨境卖家注意的是,亚马逊在去年10月份举办了有史以来第一次Prime抢先体验特卖。卖家在亚马逊会员日的注意事项1、在公告中,亚马逊鼓励卖家......
  • 2023-04-15 uniapp 点击事件冒泡
    简而言之,即父子元素都有点击事件,这时候子元素触发点击事件会连同父元素的点击事件一并触发,这就是冒泡;而需求就是子不触父。解决方案:子元素的点击事件由原来的@click或者@tap统统换成@tap.stop,据说@tap.stop比@click.stop好。注:只需改变子元素点击事件,子变父不变。......
  • 西南民族大学 春季 2023 训练赛 7
    L1-1人与神Toiterateishuman,torecursedivine.L1-2两小时学完C语言#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m,k;cin>>n>>m>>k;cout<<max(0,n-m*k);return0;}L1-3强迫症#i......
  • CVPR 2023 深挖无标签数据价值!SOLIDER:用于以人为中心的视觉
    前言 在现今的各种视觉智能场景中,对图像中人的理解和分析一直都是一个非常重要的环节。SOLIDER是CVPR2023录用的一篇来自于阿里达摩院的工作,是一个专门用于支持各种人体任务的视觉预训练模型。它提供一种自监督训练方式,让我们可以充分利用市面上大量的人体无标注数据训练出一......
  • 2023五一高速公路免费几天?高速免费时间段用手机提醒
    进入2023年的4月中旬,相信很多网友都在期待着一个重要节日的到来,这就是五一劳动节。在每年的五一黄金周,为了鼓励公众出游、回乡探亲等,高速公路会实施临时免费政策,那么今年五一高速公路免费几天?按照相关规定来看,今年五一高速免费时间段是从4月29日0时—5月3日24时,共5天。如果你想要......
  • 【流水】2023.04.15
    省选了,省选完了,省选出分了令人意外的是殷教退了当时我,zas,mizuki,2k22,crs都不信但是是真的看到gtm进了似乎kaguya和joke没进最近数学在开排列组合实验的水平也就我当年那样(笑或许比我强不少?不清楚但是格路计数\(\binom{n+m}{m}\)在做学案的时候没一个人会也是真的。期待......