gpt4 book ai didi

android - 在非 Activity 类中等待 Activity 完成

转载 作者:行者123 更新时间:2023-12-04 23:51:29 26 4
gpt4 key购买 nike

我的应用程序中有一个方法可以启动一个新的 Activity 来启动相机应用程序。相机应用程序返回一个结果(拍摄或未拍摄的照片),我将此结果存储在 Intent-Bundle 中。

在原始方法中,我想阅读这个包,因为 Activity 还没有完成,所以它不起作用。

在继续我的方法之前,我如何才能等待 Activity 完成?

方法

@Override    
public boolean startChallenge(Context context) {
Intent cam = new Intent(context, CameraIntent.class);
cam.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(cam);

Boolean done = cam.getExtras().get("done"); // << this fails obviously
}

Activity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, CAPTURE_IMAGE_CAPTURE_CODE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
intent = getIntent();
if (requestCode == CAPTURE_IMAGE_CAPTURE_CODE) {
if (resultCode == RESULT_OK) {
intent.putExtra("done", true);
} else if (resultCode == RESULT_CANCELED) {
intent.putExtra("done", false);
}
}
finish();
}

我想保留代码的结构,因为 startChallenge() 方法是从父类(super class) (Challenge) 继承的,并且 startChallenge 因类型而异(例如,有一个挑战是你必须拍照,另一个挑战是你必须回答某事,等等)。该方法在另一个 Activity 中被调用,具体取决于挑战的类型。

最佳答案

startChallenge 应该具有对期望返回结果能够调用 startActivityForResult 的 Activity 的引用

方法

@Override    
public boolean startChallenge(Activity activityB) {// Activity B in which you are expecting this result back.
Intent cam = new Intent(activityB, ActivityA.class);
activityB.startActivityForResult(cam, REQUEST_CODE_OPEN_CAMERA);
}

Activity A
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
intent = getIntent();
if (requestCode == CAPTURE_IMAGE_CAPTURE_CODE) {
if (resultCode == RESULT_OK) {
intent.putExtra("done", true);
} else if (resultCode == RESULT_CANCELED) {
intent.putExtra("done", false);
}
}

setResult(RESULT_OK, intent);
finish();
}

另一种方法是使用 LocalBroadcastManagerOtto

Activity A
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_CAPTURE_CODE) {
if (resultCode == RESULT_OK) {
BusProvider.getInstance().post(new ImageCapturedEvent(true));
} else if (resultCode == RESULT_CANCELED) {
BusProvider.getInstance().post(new ImageCapturedEvent(false));
}
}

finish();
}

关于android - 在非 Activity 类中等待 Activity 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27687818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com