首页 > 其他分享 >android 选择文件 uri 转绝对路径

android 选择文件 uri 转绝对路径

时间:2023-07-23 17:07:48浏览次数:38  
标签:文件 String uri URI cursor android 绝对路径 Android

Android选择文件URI转绝对路径

在Android开发中,我们经常需要实现选择文件的功能,然后将选择的文件处理或展示出来。然而,当我们使用Intent启动文件选择器后,返回的结果是一个文件的URI,而不是绝对路径。因此,我们需要将该URI转换为绝对路径,才能进一步操作文件。

什么是URI?

URI(Uniform Resource Identifier),统一资源标识符,是用于标识某一互联网资源名称的字符串。在Android中,文件URI是用来表示文件在存储设备上的唯一标识。

Android中的文件URI的格式类似于:content://media/external/images/media/1234,其中1234是文件的ID。不同的文件提供者可能有不同的URI格式。

获取绝对路径的方法

要将文件的URI转换为绝对路径,首先需要确定文件的URI是属于哪种类型的URI。根据文件URI的不同,我们可以有以下几种方法来获取绝对路径。

1. Content URI

如果文件的URI是一个Content URI,我们可以通过查询MediaStore来获取其绝对路径。

public String getRealPathFromURI(Uri contentUri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String path = cursor.getString(columnIndex);
    cursor.close();
    return path;
}

上述代码中,我们使用了getContentResolver().query()方法来查询MediaStore。通过传入Content URI和需要查询的列,我们可以得到一个Cursor对象。然后,通过cursor.getColumnIndexOrThrow()方法获取文件路径所在的列的索引,再使用cursor.getString()方法获取文件路径。

2. File URI

如果文件的URI是一个File URI,我们可以通过URI的getPath()方法直接获取其绝对路径。

public String getRealPathFromURI(Uri fileUri) {
    return fileUri.getPath();
}

3. Document URI

如果文件的URI是一个Document URI,我们可以使用DocumentFile类来获取其绝对路径。

public String getRealPathFromURI(Uri documentUri) {
    DocumentFile documentFile = DocumentFile.fromSingleUri(this, documentUri);
    String filePath = documentFile.getUri().getPath();
    return filePath;
}

上述代码中,我们使用DocumentFile.fromSingleUri()方法将Document URI转换为DocumentFile对象。然后,通过documentFile.getUri().getPath()方法获取文件的绝对路径。

总结

本文介绍了三种常见的文件URI转换为绝对路径的方法,包括Content URI、File URI和Document URI。通过理解文件URI的不同类型以及相应的转换方法,我们可以在Android开发中更好地处理选择文件后返回的URI,并继续使用和操作文件。

以上所示代码仅为示例,实际应用中需要根据具体情况进行调整和优化。希望本文对于理解和使用Android选择文件URI转换为绝对路径有所帮助。

标签:文件,String,uri,URI,cursor,android,绝对路径,Android
From: https://blog.51cto.com/u_16175443/6826515

相关文章

  • android控件设置显示动画
    Android控件设置显示动画作为一名经验丰富的开发者,你需要教导一位刚入行的小白如何实现Android控件的显示动画。本文将引导你完成这一过程,并提供每一步所需的代码和相关注释。1.概述在Android中,我们可以使用动画来改变控件的外观和行为。控件显示动画是指在控件出现时应用动画......
  • android静默安装apk
    Android静默安装APK教程1.整体流程在教会小白如何实现Android静默安装APK之前,我们先来了解整个流程。下面的表格展示了实现静默安装的步骤。步骤操作代码示例步骤1获取Root权限Processprocess=Runtime.getRuntime().exec("su");步骤2执行安装命令process.g......
  • android 通知渠道
    Android通知渠道在Android设备上,通知是一种重要的方式来向用户展示及时的信息,如消息、提醒或其他重要更新。为了提供更好的用户体验,Android8.0(API级别26)引入了通知渠道的概念,它允许应用程序将通知进行分类和分组,用户可以对每个渠道进行自定义设置。本文将介绍Android通知渠道的概......
  • android简易小项目源码
    Android简易小项目源码1.项目简介本项目是一个简易的Android小项目,用于展示如何创建一个基本的计算器应用程序。该应用程序可以执行基本的加、减、乘、除运算,并显示结果。2.项目结构项目的目录结构如下:-app-src-main-java/com/example/calculator......
  • android 双进程保活
    Android双进程保活在Android应用开发中,为了提供更好的用户体验,保证应用的稳定性和持久运行,我们常常需要保持应用进程的活跃状态。其中,双进程保活是一种常用的方式,本文将介绍如何通过双进程保活来实现应用的长时间运行。什么是双进程保活双进程保活是指通过启动一个后台进程来保......
  • android断点续传上传
    Android断点续传上传实现简介在Android开发中,我们经常需要实现文件上传的功能。而有时候由于网络不稳定或者其他原因,文件上传可能会中断,为了提高用户体验,我们需要实现断点续传上传功能。本文将教你如何在Android中实现断点续传上传。流程下面是实现断点续传上传的一般流程:......
  • android 刷机 user模式
    Android刷机user模式引言在Android系统中,刷机是指将系统的固件替换成第三方的固件,以获得更多的功能和自定义选项。刷机可以基于不同的模式进行,其中user模式是最常见的一种。本文将介绍Android刷机的基本概念,并提供一个代码示例来演示如何在user模式下刷机。Android......
  • android读取文件内容
    Android读取文件内容在Android开发中,有时候我们需要读取文件的内容。无论是读取本地文件还是从互联网上下载文件后进行读取,都是常见的需求。本文将介绍如何在Android中读取文件的内容,并提供相应的代码示例。1.读取本地文件在Android中,可以使用File类来表示文件,使用FileInputStr......
  • android 使用 flow
    Android使用Flow引言Flow是一个在Android开发中用于处理异步数据流的库。它可以帮助我们消除回调地狱,并提供更简洁、可读性更强的代码。本文将介绍Flow的基本概念,并提供一些使用Flow的示例代码。Flow的基本概念Flow是Kotlin协程中的一个组件,它代表了一个可以异步发射多个值的序......
  • android弹出提示框输入框不弹出软键盘
    Android弹出提示框输入框不弹出软键盘在Android应用开发中,弹出提示框是一种常见的交互方式。然而,当我们在提示框中添加输入框时,软键盘通常会自动弹出,这可能会干扰用户的操作体验。本文将介绍如何在Android应用中实现弹出提示框时输入框不弹出软键盘的方法,并提供相应的代码示例。......