我正在使用我的 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);
对于 ACTION_GET_CONTENT,您不需要任何权限。
那是从来不需要的。
imageView.setImageUri(uri);
取消照片路径。
适用于所有 Android 版本。 –
根据谷歌:
如果您的应用面向 Android 13 或更高版本并且需要访问媒体 其他应用程序创建的文件,您必须请求一个或多个 以下细化媒体权限而不是 READ_EXTERNAL_STORAGE 权限。
此外,其中还指出:
如果您的应用程序之前已被授予 READ_EXTERNAL_STORAGE 权限,则授予任何请求的 READ_MEDIA_* 权限 升级时自动。您可以使用以下 ADB 命令来 查看升级后的权限:
adb shell cmd appops get --uid PACKAGE_NAME
因此,我会针对操作系统版本 > 13 的设备/模拟器验证和检查您的应用程序,看看会发生什么(当还请求更新的权限时)。