将活动结果传递到本机模块中

Lon*_*Cpp 5 android react-native react-native-android

我正在尝试使用 react native 对文本进行一些语音识别。我写了一个反应模块来启动识别器意图

public class SpeechToTextModule extends ReactContextBaseJavaModule {

...

  @ReactMethod
  public void startListening(Callback errorCallback, Callback successCallback) {

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

    if(getCurrentActivity() != null){
        getReactApplicationContext().startActivityForResult(intent, SPEECH_REQUEST_CODE, null);
    } else {
        errorCallback.invoke(new NullPointerException("Activity is null"));
    }
}

  public void onActivityResult(int requestCode, int resultCode, Intent data){
    // control must come here
  }
Run Code Online (Sandbox Code Playgroud)

主要活动如下所示:

public class MainActivity extends ReactActivity {

  ...

  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // how do i invoke the module function?
  }
}
Run Code Online (Sandbox Code Playgroud)

MainActivity 从语音意图接收结果,但我不知道如何将其传递给模块。

Hed*_*deH 7

有一种方法可以注册为 Activity 事件侦听器

将此添加到您的本机模块:

public class SpeechToTextModule 
  extends ReactContextBaseJavaModule 
  implements ActivityEventListener {

  public SpeechToTextModule(ReactApplicationContext reactContext) {
    super(reactContext);
    reactContext.addActivityEventListener(this); //Register this native module as Activity result listener 
  }

  @Override
  public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
    // Here is your Activity result :)
  }

  @Override
  public void onNewIntent(Intent intent) {

  }
}
Run Code Online (Sandbox Code Playgroud)