android - android 从图库中选择图像(现在 startActivityForResult 已被贬值)
问题描述
相信很多人很久以前就问过这个问题了。现在, startActivityForResult 已折旧,我正在寻找它的替代品。
以前的代码是
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(
intent,
"Select Image from here..."),
PICK_CODE);
解决方案
用这个,
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.display_image);
}
public void pickAImage(View view)
{
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
someActivityResultLauncher.launch(photoPickerIntent);
}
然后进行操作,
ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
// There are no request codes
// doSomeOperations();
Intent data = result.getData();
Uri selectedImage = Objects.requireNonNull(data).getData();
InputStream imageStream = null;
try {
imageStream = getContentResolver().openInputStream(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BitmapFactory.decodeStream(imageStream);
image.setImageURI(selectedImage);// To display selected image in image view
}
});
推荐阅读
- c# - 自定义 UWP TimePicker (Flyout) 的样式
- game-center - GKTurnBasedMatch - CurrentParticipant 未触发播放器( receivedExchangeReplies )
- python - 使用 boto3 在 python 中自动填充 DynamoDB 中的时间戳
- c# - 如何在 .NET 项目中使用 Python virtualenv 进行进程?
- eclipse - 在 Eclipse 中找不到 HttpUnit 导入
- bitbucket - Bitbucket Pipelines 无法部署到 Elastic Beanstalk
- c# - 如何将弹出编辑器与网格单元对齐?
- ios - 为什么 UITableViewCell 需要注册?
- xml - XSL 模型:添加过滤器
- jquery - jquery将类添加到背景图像