我正在尝试使用 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/