Android Uri 获取path

引言

在Android开发中,经常会使用Uri来处理文件和数据。Uri是Android系统中用来表示资源定位的一个统一资源标识符。在某些情况下,我们可能需要获取Uri对应文件的路径。本文将介绍如何在Android中获取Uri对应文件的路径。

流程概述

下面是获取Uri路径的流程概述,具体步骤将在后续详细介绍。

步骤 描述
1 获取Uri
2 判断Uri的scheme
3 处理Uri
4 获取文件路径

详细步骤

1. 获取Uri

首先,我们需要获取Uri对象。在Android开发中,Uri可以通过多种方式获取,例如从Intent中获取、从ContentProvider返回的数据中获取等。在这里,我们以从Intent中获取Uri为例进行介绍。

Intent intent = getIntent();
Uri uri = intent.getData();

在这段代码中,我们通过getIntent()方法获取当前Activity的Intent对象,然后调用getData()方法获取Uri对象。

2. 判断Uri的scheme

Uri的scheme用于标识Uri的类型,常见的scheme有contentfile。我们需要根据不同的scheme来处理Uri。

String scheme = uri.getScheme();

这段代码获取了Uri的scheme,并将其保存在字符串scheme中。

3. 处理Uri

根据Uri的scheme,我们需要分别处理contentfile类型的Uri。

3.1 处理content类型的Uri

如果Uri的scheme为content,我们需要通过ContentResolver来获取文件路径。

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

首先,我们定义一个字符串数组projection,用于指定需要查询的数据列。在这里,我们只需要查询文件路径这一列。然后,通过getContentResolver().query()方法查询ContentProvider,并传入Uri、projection、selection、selectionArgs和sortOrder等参数。接下来,我们通过getColumnIndexOrThrow()方法获取文件路径这一列的索引,再调用moveToFirst()方法将游标移动到第一行,然后通过getString()方法获取文件路径。最后,我们关闭游标。

3.2 处理file类型的Uri

如果Uri的scheme为file,直接通过getPath()方法获取文件路径即可。

String path = uri.getPath();

这段代码通过getPath()方法获取Uri的文件路径。

4. 获取文件路径

无论是content类型的Uri还是file类型的Uri,我们最终都可以通过上述方法获取文件路径。

String path;
if ("content".equalsIgnoreCase(scheme)) {
    // 处理content类型的Uri
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
    int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    path = cursor.getString(columnIndex);
    cursor.close();
} else if ("file".equalsIgnoreCase(scheme)) {
    // 处理file类型的Uri
    path = uri.getPath();
}

这段代码根据Uri的scheme选择不同的处理方式,并将获取到的文件路径保存在字符串path中。

总结

本文介绍了如何在Android中获取Uri对应文件的路径。首先,我们需要获取Uri对象,然后判断Uri的scheme,根据不同的scheme进行处理。对于content类型的Uri,我们需要通过ContentResolver来获取文件路径;对于file类型的Uri,我们直接通过getPath()方法获取文件路径。通过这些步骤,我们可以轻松地获取到Uri对应文件的路径,方便进行后续操作。

参考资料:

  • [Android Developer Documentation - Uri](