等待活动的结果

时间:2018-05-19 22:21:08

标签: java android

我有一个班级(A)需要拍照,所以我创建了另一个班级(B)。但问题是,A不等待B的结果。我怎么能这样做?

这是我的代码:

拍照的类

static final int REQUEST_IMAGE_CAPTURE = 1;
Bitmap image = null;

public void takePicture(Context context, Activity activity) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(context.getPackageManager()) != null) {
        activity.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
    try {
        wait();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        image = (Bitmap) extras.get("data");
    }
}

public Bitmap getImage(){
    return image;
}

调用Camera类的方法

 public void openCamera() {

    Bitmap image = null;

    camera.takePicture((Context) _addView, (Activity) _addView);
    image = camera.getImage();

    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
    byte[] picture = outStream.toByteArray();

    _addView.SetCameraPicture(picture);
}

2 个答案:

答案 0 :(得分:0)

在拍摄照片时,您正在打开另一个能够拍照的应用程序(startActivityForResult)。当应用程序完成拍摄后,您将通过使用onActivityResult监听的意图发送数据。另一个B级必须是 Activity(startActivityForResult()只能从Activity调用)。 因此,根据您的方案,您必须先打开活动B,然后拍照, 将结果放入intent并使用该数据启动Activity A,这没有任何意义。如果您想遵循DRY原则,请将您的拍照方法放入实用程序类中,依赖项将您的课程注入到您需要的任何位置。希望这会有所帮助。

答案 1 :(得分:-1)

您总是可以尝试使B类异步,然后让A类等待B类方法