【问题标题】:PathURI from the camera library crashes相机库中的 PathURI 崩溃
【发布时间】:2025-12-13 01:15:01
【问题描述】:

我从android设备库中选择图片如下

public static void showFileChooser(Activity activity) {
 Intent intent = new Intent();
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 activity.startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1);
}

并尝试如下获取realPathFromURI,但 idx 始终返回 -1。我想知道我错过了什么。

清单文件

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

更新 1:

更新 2: 我什至尝试了以下,路径返回null

【问题讨论】:

  • 你是否在manifeast.xml中添加了读写权限?
  • 是的,我做到了。请查看我更新的问题,我已添加清单
  • 请检查我的update-2,你的标记重复,仍然得到同样的错误。
  • 您是否从任何已同步的设备文件夹(如 google drive)中选择图片?

标签: android


【解决方案1】:

使用媒体投影

 public static String getPath(Uri uri, Activity mActivity) {        
            try {
                String[] projection = {MediaStore.MediaColumns.DATA};
                Cursor cursor = mActivity.managedQuery(uri, projection, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                cursor.moveToFirst();           
                return cursor.getString(column_index);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
                return "";
            } 
        }

只需使用 getContentResolver().openInputStream(uri) 从 URI 获取 InputStream。在驱动路径的情况下

如果输入流包含null,则需要集成驱动api

【讨论】:

  • 请在我应用您的解决方案后查看我的问题中的更新,但仍然出现错误。
【解决方案2】:

如果您从设备同步文件夹中选择图像,则一定是图像 URI 的问题,请查看此 question 和此 answer

希望对你有帮助!!!

【讨论】: