場景:類別 A (非 Activity) 呼叫相機 Intent,需將 onActivityResult 結果直接給類別 B (Fragment 或 UI 執行緒元件) 處理。
public interface CameraResultHandler {
void onCameraResult(int requestCode, int resultCode, Intent data);
}
public class A {
private CameraResultHandler handler;
public A(CameraResultHandler h) { this.handler = h; }
public void startCamera(Activity act, int requestCode) {
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
act.startActivityForResult(i, requestCode);
}
// 必須由宿主 Activity 轉發
public void deliverResult(int rc, int rsc, Intent data) {
if (handler != null) handler.onCameraResult(rc, rsc, data);
}
}
public class HostActivity extends AppCompatActivity {
A a = new A(new B()); // B 實作 CameraResultHandler
@Override
protected void onActivityResult(int rc, int rsc, Intent data) {
a.deliverResult(rc, rsc, data);
}
}
startActivityForResult (支援庫 Fragment) 直接接收,無需中轉。onActivityResult**,普通類別必須透過宿主轉發。ActivityResultContracts + registerForActivityResult,更簡潔且型別安全。遵循「宿主接收、介面分發」模式,即可在非 Activity 類別中優雅處理相機回調。