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

在Android 10中从Uri获取绝对路径

在Android 10中,从Uri获取绝对路径的方式发生了变化。在此之前,可以通过使用ContentResolver的query()方法和MediaStore的常量来获取绝对路径。但是,从Android 10开始,由于隐私和安全方面的考虑,应用程序无法直接访问其他应用程序的私有文件。

为了解决这个问题,Android引入了一种新的访问Uri的方式,即使用ContentResolver的openFileDescriptor()方法。下面是获取绝对路径的步骤:

  1. 首先,检查应用程序是否具有读取外部存储权限。可以在AndroidManifest.xml文件中添加以下权限:
代码语言:txt
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 然后,使用ContentResolver的openFileDescriptor()方法打开Uri,并获取FileDescriptor对象。可以使用以下代码实现:
代码语言:txt
复制
ContentResolver resolver = getContentResolver();
ParcelFileDescriptor fileDescriptor = resolver.openFileDescriptor(uri, "r");
  1. 接下来,使用FileDescriptor对象创建FileInputStream,并获取文件的绝对路径。可以使用以下代码实现:
代码语言:txt
复制
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
File file = new File(inputStream.getFD());
String absolutePath = file.getAbsolutePath();

现在,你可以使用获取到的绝对路径进行后续的操作,例如文件的读取、上传等。

需要注意的是,上述方法仅适用于Android 10及更高版本。对于较旧的Android版本,仍然可以使用之前的方法来获取绝对路径。

推荐的腾讯云相关产品:腾讯云对象存储(COS) 腾讯云对象存储(COS)是一种安全、低成本、高可靠的云存储服务,适用于存储和处理大规模非结构化数据。它提供了简单易用的API接口,可以轻松地将数据存储到云端,并通过网络访问。腾讯云对象存储(COS)具有高可用性、高可靠性和高扩展性,适用于各种场景,如网站托管、备份与恢复、大数据分析、移动应用程序等。

产品介绍链接地址:https://cloud.tencent.com/product/cos

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

相关·内容

Android如何通过URI获取文件路径示例代码

前言 最近在工作的过程中,遇到不同 Android 版本下 URI 采用不同方式来获取文件路径的问题。...因为需求的原因,要求拍照上传或者相册中选择图片上传,而且图片是需要经过压缩的,大小不能超过2M。 很快,拍照的这部分就搞定了。那么相册中选择图片的也是一样的道理,应该也是轻松解决了。...onActivityResult(int requestCode, int resultCode, Intent data) 中获取URI 。...因为 Android 4.4 及以上的手机上,获取到的 URI 变成了 content://com.android.providers.media.documents/document/image%3A235700...这是因为 Android 4.4 及以上的机型,使用了 DocumentUri 来代表获取到文件的 URI 。 所以我们又要对于 DocumentUri 进行适配。

3.8K00

Android打开手机相册获取图片路径

本文实例为大家分享了Android打开手机相册获取图片路径的具体代码,供大家参考,具体内容如下 根据打开相机返回的Uri uri = data.getData();获取该相片的真正SD卡路径!...,realPathFromUri 为真正路径 获取真正路径 package com.example.richeditortest; import android.annotation.SuppressLint...; public class RealPathFromUriUtils { /** * 根据Uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的...(context, uri); } } /** * 适配api19以下(不包括api19),根据uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的...获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的Uri * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null

4.4K30

Android 文件管理】分区存储 ( 创建与查询图片文件 )

类型打开输出流 , 然后通过该输出流写出数据 , 文件创建完成 ; 图片创建流程 : 首先 , 获取 操作数据库的 Uri ; // 操作 external.db 数据库 // 获取 Uri 路径 var...Uri ; 这里获取外置 SD 卡 Pictures 目录对应的 Uri 对象 ; // 获取外置 SD 卡 Pictures 对应的 Uri 对象 var externalContentUri: Uri...(externalContentUri, id); Log.i(TAG, "查询到的 Uri = $uri , 路径 = $path , 文件名称 = $name , 绝对路径 = $absolutePath..., "查询到的 Uri = $uri , 路径 = $path , 文件名称 = $name , 绝对路径 = $absolutePath") // 关闭游标...42 数字 , 就是 " external.db " 数据库中 files 数据表中该 image.jpg 文件对应的 _id 字段数据 ; 绝对路径 Android 11 的 分区存储机制 中不能用来做任何操作

92020

Android实现选择相册图片并显示功能

; public class RealPathFromUriUtils { /** * 根据Uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的...Uri * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null */ public static String getRealPathFromUri(Context...(context, uri); } } /** * 适配api19以下(不包括api19),根据uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri...获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的Uri * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null...(uri.getScheme())) { // 如果是 file 类型的 Uri,直接获取图片对应的路径 filePath = uri.getPath(); } return filePath; } /

93130

透过FileProvider再看ContentProvider

Android7.0,Android提高了应用的隐私权,限制了应用间共享文件。如果需要在应用间共享,需要授予要访问的URI临时访问权限。...以下是官方说明: ★对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止您的应用外部公开 file:// URI。...可以看到,这个之前落伍的方案,自身到对方,都是不太好的选择。 所以Google就想了一个办法,把对文件的访问限制应用内部。...也正是因为这个属性为true,Android7.0以下,Android默认是将它当成一个普通的ContentProvider,外部无法通过content:// URI来访问文件。...很多人都知道该怎么配置FileProvider让别人(比如照相APP)来获取我们的Content URI,但是你们知道别人拿到Content URI之后又是怎么获取具体的File的呢?

1.1K20

Android 文件管理】分区存储 ( 修改与删除图片文件 )

MediaStore 修改图片 ---- 将 /sdcard/Pictures/image/ 目录下的 image.jpg 修改为 image_update.jpg ; 分区存储机制中 , 删除图片文件 , 不能通过获取绝对路径进行删除..., // 指定查询参数 arrayOf("image.jpg"), // 排序规则 null ) 然后 , Cursor 中获取 MediaStore.Images.Media...删除 / 修改 操作了 ; 分区存储机制 中 , 只能通过文件的 Uri 地址操作文件的 增 删 查 改 ; 修改图片 : 构造 ContentValues , 将 display_name 修改成...MediaStore 删除图片 ---- 将 /sdcard/Pictures/image/ 目录下的 image_update.jpg 文件删除 ; 分区存储机制中 , 删除图片文件 , 不能通过获取绝对路径进行删除...删除 / 修改 操作了 ; 分区存储机制 中 , 只能通过文件的 Uri 地址操作文件的 增 删 查 改 ; 删除图片 : 调用 getContentResolver 方法获取 ContentResolver

2.4K20

Android 10适配要点,作用域存储

Android 10开始,每个应用程序只能有权自己的外置存储空间关联目录下读取和创建文件,获取该关联目录的代码是:context.getExternalFilesDir()。...当然,这只是一种权宜之计,未来的Android系统版本中,这段配置随时都可能会失效(目前Android 11预览版已经确认,这段配置至少Android 11上不会失效)。...不同于过去可以直接获取到相册中图片的绝对路径作用域存储当中,我们只能借助MediaStore API获取到图片的Uri,示例代码如下: val cursor = contentResolver.query...而Android 10开始,我们已经不能以绝对路径的方式访问外置存储空间了,所以文件下载功能也会受到影响。 那么该如何解决呢?主要有以下两种方式。...然后onActivityResult()方法当中,我们就可以获取到用户选中文件的Uri,之后通过ContentResolver打开文件输入流来进行读取就可以了。 Demo效果: ?

2.1K10

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

Android7.0,Android提高了应用的隐私权,限制了应用间共享文件。如果需要在应用间共享,需要授予要访问的URI临时访问权限。...以下是官方说明: 对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止您的应用外部公开 file:// URI。...为什么限制应用间共享文件 打个比方,应用A有一个文件,绝对路径为file:///storage/emulated/0/Download/photo.jpg 现在应用A想通过其他应用来完成一些需求,比如拍照...可以看到,这个之前落伍的方案,自身到对方,都是不太好的选择。 所以Google就想了一个办法,把对文件的访问限制应用内部。...很多人都知道该怎么配置FileProvider让别人(比如照相APP)来获取我们的Content URI,但是你们知道别人拿到Content URI之后又是怎么获取具体的File的呢?

75000
领券