在Android 11中,从Gallery中选择、裁剪和保存图像的方式发生了变化。下面是一个示例代码,它实现了在Android 11设备上从Gallery中选择、裁剪和保存图像的功能。
首先,你需要在AndroidManifest.xml文件中添加访问外部存储权限:
然后在你的Activity中,你需要请求访问Gallery的权限:
private static final int REQUEST_CODE_GALLERY_PERMISSIONS = 101;
private void requestGalleryPermissions() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_GALLERY_PERMISSIONS);
} else {
chooseImageFromGallery();
}
}
如果用户允许访问权限,你可以调用chooseImageFromGallery()方法来选择图像:
private static final int REQUEST_CODE_CHOOSE_IMAGE = 102;
private void chooseImageFromGallery() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_CODE_CHOOSE_IMAGE);
}
在onActivityResult()方法中,你可以处理选中图像的结果:
private static final int REQUEST_CODE_CROP_IMAGE = 103;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == REQUEST_CODE_CHOOSE_IMAGE) {
Uri uri = data.getData();
cropImage(uri);
} else if (requestCode == REQUEST_CODE_CROP_IMAGE) {
Bitmap bitmap = data.getParcelableExtra("data");
saveImage(bitmap);
}
}
}
最后,你可以使用