Android 获取图片文件到本地的 URI

在 Android 开发中,有时候我们需要从外部存储中获取图片,并将其保存到本地。释出 URI 是 Android 中处理文件非常重要的一部分,尤其当我们需要与其他应用程序共享数据时。本文将详细探讨如何在 Android 中获取图片文件的 URI,并提供一些代码示例。

什么是 URI?

URI(Uniform Resource Identifier)是用来标识资源的字符串。从技术上讲,URI 是 URL 的一个超集。它可以指向本地文件、网络资源或数据库记录等。在 Android 开发中,获取文件的 URI 可以方便我们访问和共享这些文件。

加入权限

在 Android 中,访问外部存储需要相应的权限。在 AndroidManifest.xml 中加入以下代码:

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

如果你的应用目标版本为 Android 6.0 及以上,还需要在运行时请求权限。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE);
}

获取图片 URI

我们来看看如何获取本地图片的 URI。首先,我们需要选择一张图片。使用 Intent 调用系统相册,可以让用户选择一张图片:

Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PICK_IMAGE_REQUEST);

onActivityResult 中处理用户选择的图片 URI:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null) {
        Uri selectedImageUri = data.getData();
        // 这里可以用 selectedImageUri 来处理图片
    }
}

将图片保存到本地

如果你要将获取到的 URI 保存到本地,可以使用 ContentResolver 来复制图片:

private void saveImageToLocal(Uri imageUri) {
    try {
        InputStream inputStream = getContentResolver().openInputStream(imageUri);
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
        // 保存 bitmap 到本地文件
        FileOutputStream outputStream = new FileOutputStream(new File(getExternalFilesDir(null), "image.png"));
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
        outputStream.flush();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

注意事项

  • 在 Android 10 及以上版本,必须使用 Scoped Storage 进行文件操作。
  • 在使用 URI 时,始终确保有解码权限,避免出现文件未找到或读权限不足的错误.

旅行图示例

为了让您对 Android 获取图片的整个过程有一个更直观的理解,下面是一个旅行图的代码示例,使用 mermaid 语法进行描述:

journey
    title Android 获取图片文件到本地的 URI
    section 选择图片
      用户选择图片 : 5: 用户
      系统调用相册 : 4: 系统
      返回选中图片 URI : 5: 系统
    section 保存图片
      获取输入流 : 5: 应用
      处理图片数据 : 4: 应用
      保存到本地 : 5: 应用

结尾

通过本文的讲解,我们学习了如何在 Android 中获取图片文件的 URI,并将它们保存到本地。通过适当的权限设置以及使用系统提供的 API,用户可以方便地获取和管理他们的图片资源。希望这篇文章能帮助你在 Android 开发中更好地处理图像文件。如有更多问题或建议,欢迎踊跃反馈!