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

Android | 作用域存储适配

拍照完成后,拿到对应的 uri 如果要直接显示图片,则通过 uri 可直接加载 如果图片要上传,则需要将 uri 处理为一 file 对象 ​ 在 10.0 中,只能访问沙箱文件和共享文件夹...: "application/msword" } 2,选择文件后,intent 会返回一 uri,然后将 uri 转为 file /** * uri 转 file */ fun uriToFile...到此时,文件以及被复制到了沙箱中,你可以对他进行任意处理,但是如果要打开这个文件,则需要使用其他应用来打开,这个时候文件存储在沙箱下面就不行了,因为其他 app 无法获取当前 app 沙箱下的文件。...所以,在这里需要将文件复制到共享目录下面,然后生成对应的 uri,在通过别的 app 打开即可 //打开文件 data.fileData?.file?....* 打开文件 */ fun openFileEx(uri: Uri?

69520
您找到你想要的搜索结果了吗?
是的
没有找到

targetSdk27 FileProvider 摄像和照相

而从 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一 File ,否者会抛出 FileUriExposedException的错误,会直接引发 Crash。...但是,既然官方对文件的分享做了一这么强硬的修改(直接抛出异常),实际上也提供了解决方案,那就是 FileProvider,通过 content://的模式替换掉 file://,同时,需要开发者主动升级...在这个程序中,我们不需要关心如何去扫描手机中的文件,只要了解如何查询和使用这些信息就可以了。...有关系,因为我们的Uri不是目标文件的绝对路径,所以查询不到任何东西。...至于Uri怎么设置成绝对路径(试了试,都没有成功), 我自己拼了Uri Uri uri = new Uri.Builder() .scheme(

86210

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

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。...所以Google就想了一办法,把对文件的访问限制在应用内部。...如果要分享文件路径,不要分享file:// URI这种文件的绝对路径,而是分享content:// URI,这种相对路径,也就是这种格式:content://com.jimu.test.fileprovider...这主要为了保护应用隐私,如果设置为true,那么任何一应用都可以来访问当前应用的FileProvider了,对于应用文件来说不是很可取,所以Android7.0以上会通过其他方式让外部应用安全的访问到这个文件...拿到Content URI 该怎么使用

75500

Android7.0适配之FileProvider

同样的,官网也给出了解决方案: 要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider 类。...总不能使用文件路径吧,那不是骗自己么~ 所以,需要一虚拟的路径对文件路径进行映射,所以需要编写个xml文件,通过path以及xml节点确定可访问的目录,通过name属性来映射真实的文件路径。...现在拿7.0的原生手机运行就正常啦~ 不过事情到此并没有结束~~ 打开一4.4的模拟器,运行上述代码,你会发现又Crash啦,抛出了:Permission Denial~ Caused by: java.lang.SecurityException...当然了,完全使用uri也有一些好处,比如你可以使用私有目录去存储拍摄的照片 文章最后会给出快速适配的方案~不需要这么麻烦 好像,还有什么知识点没有提到,再看一例子吧~ 四、使用FileProvider...AndroidManifest.xml中注册; 而又因为需要对真实的filepath进行映射,所以需要编写一xml文档,用于描述可使用文件夹目录,以及通过name去映射该文件夹目录。

1.6K40

App磁盘沙盒工具实践

Fragment栈 4.2 File文件列表 4.3 不同版本访问权限 4.4 访问文件操作 4.5 10和11权限说明 4.6 分享文件给第三方 4.7 打开图片资源 4.8 为何需要FileProvider...可能存在的任务栈是:打开A1->打开B1->打开C1 那么点击返回键按钮,返回关闭的顺序则是:关闭C1->关闭B1->关闭A1 Fragment回退栈处理方式 第一种方案:创建一栈(先进后出),打开一...文件共享方式是如何理解 一常见的应用场景:应用A里检索到一文件yc.txt,它无法打开,于是想借助其它应用打开,这个时候它需要把待打开文件路径告诉其它应用。对应案例就是,把磁盘文件分享到qq。...那么会导致另一额外的问题:接收方不知道真实路径,如何读取文件呢? 对第二问题既然不确定接收方是否有打开文件权限,那么是否由发送方打开,然后将流传递给接收方就可以了呢?...2、应用B使用Uri通过IPC获取应用A的FileProvider。 3、应用A使用FileProvider通过映射表将Uri转为Path,并构造出文件描述符。

1.7K30

android之实现打开相册、拍照录像、播放视频、保存图片到系统相册指定位置、图片压缩

* FileProvider是ContentProvider的一子类,用于应用程序之间私有文件的传递。...自Android 7.0后系统禁止应用向外部公开file://URI , * 因此需要FileProvider来向外界传递URI,传递的形式是content : //Uri使用时需要在清单文件中注册。...文件夹,xml下面建立file_paths.xml文件,这个文件的主要作用是向外提供content://uri路径。...= Activity.RESULT_OK) { return; } } *****打开相册 方式一:这种方式会打开,页面显示错误报告、图库、文件管理,近期的图片页面,图片、视频、文件都可以选择 Intent...方式二:打开选择图片,显示的是一图片文件夹 Intent intentFromGallery = new Intent(); // 设置文件类型 intentFromGallery.setType

5.2K20

折叠屏开发指导系列④丨支持分屏和悬浮窗模式,正确获取应用布局资源

前言 有时候,我们在运行多个任务时,需要把窗口同时显示在屏幕上,这样操作比较方便,而且可以避免频繁切换窗口的麻烦。折叠屏设备的分屏模式可以让两应用或者任务同时在一屏幕下显示,提高工作效率。...hl=zh-CN 对于拖拽的实现需要关注权限,拖拽权限方面,应用使用的两方式提供: (1)针对对外公开文件使用媒体库MediaProvier,需要读写外部存储权限。...(2)针对应用隐私数据,使用FileProvider进行文件共享。...URI 实例: content://com.mydomain.fileprovider/my_images/default_image.jpg 如何提高应用的使用体验,需要开发者的积极跟进与完善。...分屏后,屏幕一分为二,两应用窗口互不干扰,大大提高了屏幕使用效率。以上内容为折叠屏开发指导系列之分屏和悬浮窗、数据拖拽内容,后续软件绿色联盟会继续发布开发、调测工具的深度解读文章。 End

92840

基于Android FileProvider 属性配置详解及FileProvider多节点问题

虽然name属性是一URI路径片段,但是path是一真实的子目录名。注意,path是一子目录,而不是单个文件或者多个文件。...这里,我们需要使用 FileProvider 类提供的公有静态方法 getUriForFile 生成 Content URI。...第二参数便是 Manifest 文件中注册 FileProvider 时设置的 authorities 属性值,第三参数为要共享的文件,并且这个文件一定位于第二步我们在 path 文件中添加的子目录里面...自动安装文件 版本更新完成时打开新版本 apk 文件实现自动安装的功能,应该是最常见的使用场景,也是每个应用必备功能之一。...常见操作为,通知栏显示下载新版本完毕,用户点击或者监听下载过程自动打开新版本 apk 文件

2.4K21

Android 图片选择到裁剪之步步深坑

Intent,效果是这样的,需要用户去选择使用哪个应用: 而从 Android 4.4 开始,就变成了这样: 直接打开一资源选取的软件(这个软件平时是隐藏的,不会显示在软件列表中),其中包含了访问设备上所有可访问资源软件的接口...转眼又碰到了一问题: Android 为了提高私有文件的安全性,从 7.0 开始对外传递file://类型的uri会触发FileUriExposedException。...因此,在分享私有文件时必须使用FileProvider。...而解决的办法也很简单,我们需要给图片裁剪应用指定一输出文件,用来存放裁剪后的图片: private void routeToCrop(Uri uri) { ......而要想使用公共的存储空间,就势必要面对一问题:Android 6.0 的运行时权限。

1.9K80

JavaScript - Window.open 弹窗 详解

弹窗 window.open( ) , 它会打开一指定URL 的新窗口。 浏览器会打开一新的选项卡URL,而不是独立的窗口。...window.open (URL, name, features, replace) URL: 打开指定链接, 如果为空的话,则打开一新窗口显示空白文档 name: 新窗口的名称。...----> left/top(数字)—— 屏幕上窗口的左上角的坐标。这有一限制:不能将新窗口置于屏幕外(offscreen)。 width/height(数字)—— 新窗口的宽度和高度。...因此,使用弹窗打开一不信任的第三方网站是安全的。...打开弹窗非常容易 弹窗可以导航(修改 URL),并将消息发送到 opener 窗口(译注:即打开弹窗的窗口) 打开一小窗口 let params = `scrollbars=no,resizable=

78120

Android7.0以上版本打开附件失败问题

简介:   Android7.0修改了文件权限,导致访问内部文件通过Uri.fromFile(file)构建URI,然后Intent启动意图的方式将不再适用。原因是这种方式构建的uri不够安全。...官方建议通过FileProvider,通过文件共享的方式构建URI。...可参考文章快速引入FileProvider 遇到的问题: Failed to find configured root that: 构建URI时就出现了错误,配置的Filepath和文件路径不匹配,匹配即可...,也可以使用相对路径: 打开附件时,提示文件名不存在,但是确定文件是存在的 构建uri时会要求传入文件作为参数,这里可以判断自己的文件是否存在...contenturi=FileProvider.getUriForFile(context, "com.mintu.dcdb.fileprovider",f);

1.2K30

Android 通过代码安装 APK的方法详解

对于通过代码打开系统安装程序这一功能的限制,其分水岭在 Android7.0,即 Android N 上。通常在 Android N以上的系统使用一种做法,以下则使用另一种做法。...这个类可以填写两值,一是位于 support(android.support.v4.content.FileProvider) 包下的,另一是位于 androidx(androidx.core.content.FileProvider...这个属性的值引向一自行配置的 xml 文件,这份 xml 文件记载的是设备中的路径信息,简单理解就是你想开放哪些目录中的文件资源给第三方使用的意思。关于这个 xml 的配置请看第 2 步的记载。...关键的代码其实只有一行: Uri uri = FileProvider.getUriForFile(context, authority, file); 这里的三参数分别为: context:这里表示需要传一上下文过来...); Uri uri = FileProvider.getUriForFile(context, authority, file); 通常我们都会兼顾 Android 高低版本的系统,因此会使用如下所示的

8.2K21

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

Android N 之前的 Uri 常规Uri有两种: 媒体文件Uri是content://, 表示这是一数据库数据。去数据库查询正常返回。...其他的文件Uri是file://, 表示这个是一文件。这个uri是通过Uri.fromFile(File file)方法生成。 Android N 之前,这些uri可以传递到其他应用。...FileProvider这个类就是把一文件File,转换为 content://URIFileProvider是ContentProvider子类,所以FileProvider使用方法,和ContentProvider...resource:自定义的xml文件(下面会介绍) 2、在res目录下新建一xml文件夹,并且新建一file_paths的xml文件(如下图) 3、打开file_paths.xml文件,添加指定的分享目录...的时候,指定的文件所在的路径没有包含在path所指定的路径中 疑惑 遇到这样一到现在没有理解的问题,在小米6,MIUI 9.0 上面,使用下面的代码,进行图片的裁剪。

3.3K40

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

Uri.parse(path)”将字符串转换为Uri对象,但是从Android7.0开始,系统不允许其他应用直接访问老格式的路径,必须使用文件提供器FileProvider才能获取合法的Uri路径,相当于...-- 兼容Android7.0,把访问文件Uri方式改为FileProvider --> <provider android:name="androidx.core.content.<em>FileProvider</em>...<em>Uri</em> <em>uri</em> = <em>Uri</em>.parse(path); // 根据指定路径创建一<em>个</em><em>Uri</em>对象 // 兼容Android7.0,把访问<em>文件</em>的<em>Uri</em>方式改为<em>FileProvider</em> if (Build.VERSION.SDK_INT...>= Build.VERSION_CODES.N) { // 通过<em>FileProvider</em>获得<em>文件</em>的<em>Uri</em>访问方式 <em>uri</em> = <em>FileProvider</em>.getUriForFile(this...<em>FileProvider</em>的getUriForFile方法获得<em>Uri</em>对象,该方法的第二<em>个</em>参数为<em>文件</em>提供器的授权字符串(BuildConfig.APPLICATION_ID值为当前应用的包名),第三<em>个</em>参数为

65920
领券