如何在没有startActivityForResult / onActivityResultin的情况下访问图库并选择图像?

时间:2017-11-23 18:25:21

标签: android

我有一个带溢出菜单的CardView(播放器的CardView)。菜单有一个编辑和删除,当你点击编辑时,启动一个对话框,这个对话框中有很多属性。其中之一是ImageView(玩家的照片),当您点击启动Intent时,您可以在图库中选择一张照片。 我的问题是如何获得该图像并设置我的ImageView?

在另一个帖子中,我看到它们被startActivityonActivityResult使用,但在我的CardView中,我无法使用此方法。

我无法使用onActivityResult和startActivity来管理我从图库中选择的图片

谢谢!

1 个答案:

答案 0 :(得分:0)

如果你不能使用onActivityResult,那么有一个可能适合你的解决方案。

创建第二个Activity(PickImageActivity)

在Intent

中存储ResultReceiver作为参数

从那个Activity onCreate

启动startActivityForResult
 Intent intent = new Intent();
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);

在onActivityResult中你有这样的东西:

 Bitmap received = BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData()));
 Bundle result = new Bundle();
 result.putParcelable(RESULT_KEY, received);
 ((ResultReceiver) getIntent().getParcelableExtra(RECEIVER_KEY)).send(RESULT_OK, result);
 finish();

所以你可以这样开始:

Intent pickImage = new Intent(this, PickImageActivity.class);
pickImage.putExtra(RECEIVER_KEY, new ResultReceiver() {
       public void onReceive(int resultCode, Bundle data) {
               //Work with the data received here trough RESULT_KEY
       }
});

如果位图不适合您的内存,请发送内容文件路径。

这个解决方案确实有效,我在项目中实现了它,但是对于activityResult进行了重构,如果上一个Activity被销毁,你就不会收到数据