如何在React Native Android中使用Activity Results API?

4

我正在尝试为React Native创建Android原生模块,并且我正在使用Activity Results API启动另一个活动。但是,即使我在Gradle中列出了这两个依赖项,仍然找不到registerForActivityResult

implementation "androidx.activity:activity:1.2.0"
implementation "androidx.fragment:fragment:1.3.0"

这是我想要实现的目标:
ActivityResultLauncher<String> mGetContent = registerForActivityResult(new GetContent(),
    new ActivityResultCallback<Uri>() {
        @Override
        public void onActivityResult(Uri uri) {
            // Handle the returned Uri
        }
    }
);
1个回答

1

我知道我有点晚来参加这个聚会。但是我也遇到了同样的问题,我想分享一下我是如何解决它的,希望能帮助其他人。

首先,我创建了一个新的接口(在它自己的文件中),以便在MainActivity和React Native模块之间建立契约:

public interface OnActivityResultImplementation<S, T> {
    S execute(T a);
}

在我的MainActivity中,我有以下代码:
public class MainActivity extends ReactActivity {
protected OnActivityResultImplementation onActivityResultImplementation = null;
protected ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        result -> {
            onActivityResultImplementation.execute(result);
        });
   ...
}

然后在React Native模块中,我按照以下方式设置它:

public class RCTPushProvisioningModule extends ReactContextBaseJavaModule {

@ReactMethod
public void callNativeApiMethod(final Promise promise) {
    MainActivity activity = (MainActivity) this.getReactApplicationContext().getCurrentActivity();
    activity.onActivityResultImplementation = result -> {
        ActivityResult activityResult = (ActivityResult) result;
        switch (activityResult.getResultCode()) {
            case Activity.RESULT_OK:
                promise.resolve(OK);
                break;
            case Activity.RESULT_CANCELED:
                promise.resolve(CANCELED);
                break;
            default:
                promise.reject(ERROR_CODE, "FAILED");
                break;
        }
        return null;
    };

    // Use the ActivityResultLauncher<Intent> from MainActivity to wire the whole thing up.
    fictiveNativeApi.callMethodThatRequiresActivityResultLauncher(activity.mStartForResult);
  }
}

如何在新架构中使用TurboModules进行此操作。您能帮忙吗?https://dev59.com/CNX8oIgBc1ULPQZFEIar - BraveEvidence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接