android - 将 Activity 结果传递到 React Native 模块中

标签 android react-native

我正在尝试使用 React Native 对文本进行一些语音识别。我写了一个 react 模块来启动识别器 Intent

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
  }

主要 Activity 如下所示:

public class MainActivity extends ReactActivity {

  ...

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

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

最佳答案

有一种方法可以register as Activity event listener .

将此添加到您的 native 模块:

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) {

  }
}

关于android - 将 Activity 结果传递到 React Native 模块中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411220/

相关文章:

java - 如何为提示中的字符串设置颜色?

android - Admob插件,用于统一使我的游戏在Android 5.0上崩溃

android - "Property description must be an object error"在非 Debug模式下执行命令 react-native run-android

android - 生成不等于数组列表项的数字

android - ActiveAndroid 如何从表中获取单列项目并将其存储在 arraylist 中

Android如何区分后台应用程序和后台 Activity ?

javascript - Redux thunk,将其用作列表或对象之间的区别

ios - requiresMainQueueSetup 和 dispatch_get_main_queue 的区别?

javascript - 如何确保在 Firebase 查询填充数组后调用 setState?

java - 提供的 javaHome 似乎无效。我找不到 java 可执行文件。尝试位置 : C:\Program Files\Java\jdk-17\bin\java. exe