是否可以使用 android.permission.READ_MEDIA_IMAGES 将外部存储中的图像作为位图加载?

问题描述 投票:0回答:2

我正在使用我的 Galaxy A31 开发应用程序,Android 操作系统版本为 11。 我的客户要求为应用程序添加图片。

如果我使用 READ_EXTERNAL_STORAGE 权限,我可以轻松地在应用程序中添加此功能。 但其他开发者表示,谷歌将在今年 11 月之前删除拥有此权限的整个应用程序, 还有 Galaxy 商店!

应用程序应该在 ImageView 上使用位图显示图像。

我可以在 Android 13+ 上执行此操作吗?

在我的 Galaxy A31 中,应用程序跳过请求 READ_MEDIA_IMAGES

下面是我的源代码。它是Java,在onCreate()

if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_MEDIA_IMAGES) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_MEDIA_IMAGES}, 1);
        } else {
            addPictureButton.setOnClickListener(view -> {
                Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT);
                imageIntent.setType("image/*");
                startActivityForResult(imageIntent, 1);

                Uri uri = imageIntent.getData();

                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();
                photoPath = cursor.getString(columnIndex);

                cursor.close();
            });
        }

下面的源代码是从外部存储加载位图。 我想知道它是否会导致 java.lang.SecurityException.

Bitmap bitmap = BitmapFactory.decodeFile(photoPath);
imageView.setImageBitmap(bitmap);
android bitmap android-permissions samsung-galaxy android-api-levels
2个回答
0
投票

对于 ACTION_GET_CONTENT,您不需要任何权限。

那是从来不需要的。

 imageView.setImageUri(uri); 

取消照片路径。

适用于所有 Android 版本。 –


-1
投票

根据谷歌

如果您的应用面向 Android 13 或更高版本并且需要访问媒体 其他应用程序创建的文件,您必须请求一个或多个 以下细化媒体权限而不是 READ_EXTERNAL_STORAGE 权限。

此外,其中还指出:

如果您的应用程序之前已被授予 READ_EXTERNAL_STORAGE 权限,则授予任何请求的 READ_MEDIA_* 权限 升级时自动。您可以使用以下 ADB 命令来 查看升级后的权限:

adb shell cmd appops get --uid PACKAGE_NAME

因此,我会针对操作系统版本 > 13 的设备/模拟器验证和检查您的应用程序,看看会发生什么(当还请求更新的权限时)。

© www.soinside.com 2019 - 2024. All rights reserved.