Android - 来回传递意图

Android - passing Intents back and forth

我有两个活动:activity_mainactivity_takeapicture。我从 activity_main 开始一个意图,另一个 activity 拍照。然后 activity_takeapicture 将文件的另一个意图发送回 activity_main。在 activity_main 中,我应该使用 onActivityResult 方法来捕获 activity_takeapicture 发送的意图并随后接收数据吗?这是 activity_main 中发送意图的部分:

    Intent intent = new Intent(this, DisplayResult.class);
    startActivity(intent);

这里是“activity_takeapicture”:

Intent intent = new Intent(context, MainActivity.class);
        intent.putExtra(Intent.EXTRA_STREAM, pictureFile);
        startActivity(intent);

编辑: 我已经尝试过你们所说的,但是现在 onActivityResultactivity_takeapicture returns 意图时不会触发背部。我该如何解决?

你可以那样做,但你必须关闭所有你打开的意图以避免内存使用,当你返回时,你不会看到超过 9,000 个活动 xD 它不会避免内存使用,因为只有在您 return 之后它才会关闭 te Activity。

您还可以使用 alnActivityResult,这是更好的解决方案,因为您不会打开太多活动,而且对您和您的用户来说都很简单

如果activity_takeapicture将图片保存在设备SD卡上,可以使用下面的方法。

intent.putExtra("SavedImageDirectory", filepath); //this will save the file path 

然后在您的 activity_main 中您可以使用

//this will get the file path of the saved image
String ImageDirectory = getIntent().getStringExtra("SavedImageDirectory"); 

//this will decode the filepath into a bitmap 
Bitmap bp = BitmapFactory.decodeFile(ImageDirectory);

//this will display the bitmap on your imageview on the `activity_main`
MyImageView.setImageDrawable(bp);

试试这个:

在你的Class中初始化一个静态变量

private static final int CAM_REQUEST = 1;

在您的按钮侦听器方法中

public void onClick(View v){
   Intent takePictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   startActivityForResult(takePictureIntent, CAM_REQUEST);
}

然后在你的 Activity 重写这个方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
   if(requestCode == CAM_REQUEST){
      Bitmap thumbTaken = (Bitmap) data.getExtras().get("data");
      yourImageView.setImageBitmap(thumbTaken);
   }
}

并且不要忘记授予使用 CAMERA 的权限

希望对您有所帮助!!!

不要使用 startActivity。请改用 startActivityForResult