我有一个班级(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);
}
答案 0 :(得分:0)
在拍摄照片时,您正在打开另一个能够拍照的应用程序(startActivityForResult)。当应用程序完成拍摄后,您将通过使用onActivityResult监听的意图发送数据。另一个B级必须是 Activity(startActivityForResult()只能从Activity调用)。 因此,根据您的方案,您必须先打开活动B,然后拍照, 将结果放入intent并使用该数据启动Activity A,这没有任何意义。如果您想遵循DRY原则,请将您的拍照方法放入实用程序类中,依赖项将您的课程注入到您需要的任何位置。希望这会有所帮助。
答案 1 :(得分:-1)
您总是可以尝试使B类异步,然后让A类等待B类方法