语音识别不适用于片段
speech recognition not working from a Fragment
我有一个使用 ACTION_RECOGNIZE_SPEECH 意图的应用程序。当我从 Activity 调用 startActivityForResult 并且相应的 onActivityResult 位于相同的 Activity.
时,它工作正常
我的问题是我有另一个使用片段的应用程序。如果我从片段中调用 startActivityForResult,则不会出现语音框。
我尝试过的:
我试过在父 Activity 中重写 ActivityResult,然后调用 getActivity.startActivityForResult(intent, SPEECH_REQUEST_CODE);
这只是启动意图和 Activity class 中的 onActivityForResult 执行。
我尝试了以下 post 的各种组合。
onActivityResult is not being called in Fragment
这是我目前拥有的代码和日志。有人有什么建议吗?
注意我在清单中也有以下权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET" />
.
父级 Activity:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "inside onActivityForResult in parent. requestCode = " + requestCode + "resultCode = " + requestCode + " data = " + data );
}
.
片段class:
private static final int SPEECH_REQUEST_CODE = 0;
// Create an intent that can start the Speech Recognizer activity
private void displaySpeechRecognizer() {
Log.e(TAG, "inside displaySpeechRecognizer() and speechRequestCode = " + SPEECH_REQUEST_CODE);
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
// This callback is invoked when the Speech Recognizer returns.
// This is where you process the intent and extract the speech text from the intent.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG, "inside onActivityForResult in child fragment. requestCode = " + requestCode + " resultCode = " + resultCode);
if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
// Do something with spokenText
Log.e(TAG, "spokenText = " + spokenText);
etCommentEditText.append(" " + spokenText);
}
super.onActivityResult(requestCode, resultCode, data);
}
.
日志:
05-02 14:57:37.012 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside displaySpeechRecognizer() and speechRequestCode = 0
05-02 14:57:37.072 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside onActivityForResult in child fragment. requestCode = 0 resultCode = 0
您必须调用 recognizer.startListening(speechIntent);
并停止 recognizer.stopListening();
现在它可以分段工作。
假设,您想要在单击按钮调用上述方法时初始化语音识别器。
我有一个使用 ACTION_RECOGNIZE_SPEECH 意图的应用程序。当我从 Activity 调用 startActivityForResult 并且相应的 onActivityResult 位于相同的 Activity.
时,它工作正常我的问题是我有另一个使用片段的应用程序。如果我从片段中调用 startActivityForResult,则不会出现语音框。
我尝试过的:
我试过在父 Activity 中重写 ActivityResult,然后调用 getActivity.startActivityForResult(intent, SPEECH_REQUEST_CODE); 这只是启动意图和 Activity class 中的 onActivityForResult 执行。
我尝试了以下 post 的各种组合。
onActivityResult is not being called in Fragment
这是我目前拥有的代码和日志。有人有什么建议吗?
注意我在清单中也有以下权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.INTERNET" />
.
父级 Activity:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "inside onActivityForResult in parent. requestCode = " + requestCode + "resultCode = " + requestCode + " data = " + data );
}
.
片段class:
private static final int SPEECH_REQUEST_CODE = 0;
// Create an intent that can start the Speech Recognizer activity
private void displaySpeechRecognizer() {
Log.e(TAG, "inside displaySpeechRecognizer() and speechRequestCode = " + SPEECH_REQUEST_CODE);
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
// Start the activity, the intent will be populated with the speech text
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
// This callback is invoked when the Speech Recognizer returns.
// This is where you process the intent and extract the speech text from the intent.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.e(TAG, "inside onActivityForResult in child fragment. requestCode = " + requestCode + " resultCode = " + resultCode);
if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
// Do something with spokenText
Log.e(TAG, "spokenText = " + spokenText);
etCommentEditText.append(" " + spokenText);
}
super.onActivityResult(requestCode, resultCode, data);
}
.
日志:
05-02 14:57:37.012 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside displaySpeechRecognizer() and speechRequestCode = 0
05-02 14:57:37.072 14414-14414/com.carefreegroup.rr3.carefreeoncall E/AlertDetailsFragment: inside onActivityForResult in child fragment. requestCode = 0 resultCode = 0
您必须调用 recognizer.startListening(speechIntent);
并停止 recognizer.stopListening();
现在它可以分段工作。
假设,您想要在单击按钮调用上述方法时初始化语音识别器。