其他分享
首页 > 其他分享> > android-将活动结果传递到react本机模块

android-将活动结果传递到react本机模块

作者:互联网

我正在尝试使用react native对文本识别进行一些演讲.我编写了一个react模块来启动识别器意图

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
  }

mainactivity看起来像这样:

public class MainActivity extends ReactActivity {

  ...

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

MainActivity从语音意图接收结果,但是我无法弄清楚如何将其传递给模块.

解决方法:

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

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

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

  }
}

标签:react-native,react-native-android,android
来源: https://codeday.me/bug/20191108/2007717.html