首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 相機回調傳遞:非 Activity 類別 A 接收 onActivityResult 轉交給 Fragment/Activity B

     編輯:程式設計綜合問答

場景:類別 A (非 Activity) 呼叫相機 Intent,需將 onActivityResult 結果直接給類別 B (Fragment 或 UI 執行緒元件) 處理。

實作模式

  1. A 持有 B 的介面參考:
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);
    }
}
  1. 宿主 Activity 實作轉發:
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);
    }
}
  1. 若 B 是 Fragment,可在 Fragment 內 startActivityForResult (支援庫 Fragment) 直接接收,無需中轉。

關鍵點

  • **只有 Activity/Fragment 能接收 onActivityResult**,普通類別必須透過宿主轉發。
  • 使用介面解耦,A 不依賴 B 具體實作。
  • AndroidX 建議改用 ActivityResultContracts + registerForActivityResult,更簡潔且型別安全。

遵循「宿主接收、介面分發」模式,即可在非 Activity 類別中優雅處理相機回調。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved