Android SAF获取图片路径

Android 的 Storage Access Framework(SAF)是一个用于访问用户设备上的文件的 API。通过 SAF,应用可以请求用户选择文件或目录,并且能够在不涉及实际权限的情况下访问这些文件。

在本文中,我们将介绍如何使用 SAF 获取图片路径的方法,并附上相应的代码示例。

1. 在 AndroidManifest.xml 文件中添加权限

首先,在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 请求用户选择图片

在你的 Activity 中,你可以使用 Intent.ACTION_OPEN_DOCUMENT 或 Intent.ACTION_GET_CONTENT 来请求用户选择图片,并获取图片的 URI。

private static final int PICK_IMAGE_REQUEST = 1;

public void pickImage() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    
    startActivityForResult(intent, PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) {
        Uri uri = data.getData();
        String imagePath = getRealPathFromURI(uri);
    }
}

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
    
    if (cursor == null) {
        return contentUri.getPath();
    } else {
        cursor.moveToFirst();
        int column_index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
        String path = cursor.getString(column_index);
        cursor.close();
        return path;
    }
}

3. 关系图

erDiagram
    USER ||--o REQUEST
    REQUEST ||--o IMAGE

4. 完整流程

flowchart TD
    A(Start) --> B(Request Image)
    B --> C(Get Image URI)
    C --> D(Get Real Path)
    D --> E(End)

通过以上步骤,你可以使用 Android SAF 获取图片的路径,并进行进一步的操作。祝你使用愉快!

结语

本文介绍了如何在 Android 应用中使用 SAF 获取图片路径的方法,并提供了相应的代码示例。希望对你有所帮助,谢谢阅读!