我从媒体存储图像 Select 中返回onActivityResult,我可以使用以下命令获取图像的URI:

Uri selectedImage = data.getData();

将其转换为字符串将得到以下结果:

content://media/external/images/media/47

或指向给出的路径:

/external/images/media/47

然而,我似乎无法找到一种方法将其转换为绝对路径,因为我想将图像加载到位图中,而无需将其复制到某个地方.我知道这可以通过URI和内容解析器来实现,但这似乎是在重新启动手机时中断的,我猜MediaStore在重新启动之间不会保持其编号相同.

推荐答案

Below API 19使用以下代码从URI获取文件路径:

public String getRealPathFromURI(Context context, Uri contentUri) {
  Cursor cursor = null;
  try { 
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
  } finally {
    if (cursor != null) {
      cursor.close();
    }
  }
}

Android相关问答推荐

如何自定义所选的NavigationBar项目?

为什么使用. DeliverveAsState()时会出现空指针异常?

当X为lambda函数时,如何避免Android Studio错误检测参数X未使用?

Google Play测试应用程序Crash-java.lang.NoSuchFieldError:没有Lkotlinx/coroutines/CoroutineExceptionHandler类型的字段键

替换- prop -中的值(adb shell getprop)

如何从Android 12的来电中获取电话号码?

登录方法显示为空列表,即使它显示的是Firebase身份验证控制台

无法加载类';com.android.build.api.extension.AndroidComponentsExtension';

Jetpack Compose:带芯片的Textfield

如何解决Gradle构建错误:java.lang.NoSuchMethodError

LaunchedEffect没有延迟时应用程序崩溃

是否可以附加事件处理程序,如onClick,拖动到Canvas Composable中绘制的内容,或使用drawBehind修饰符?

Android 应用程序从 Android Studio 安装,但不是作为 .apk 在外部安装.抛出java.lang.UnsatisfiedLinkError

Android Compose 为什么 Checkbox 在父对象可点击时需要 onCheckChanged?

AirDroid Business 如何能够从屏幕截图中排除覆盖?

如何限制键盘输入键不允许在下一行输入(Android Jetpack Compose 中的 TextField)

我不能在 jetpack Compose 中使用 TextField()(material 3)

Compose `Icons.Outlined.Star` 没有概述

Kotlin:如何在另一个变量的名称中插入一个变量的值

如何使伴奏导航 BottomSheet 完全展开?