这是一个已知的Android 11的bug。为了解决这个问题,需要在Manifest文件中添加一个权限:android.permission.MANAGE_VOICE_KEYPHRASES。
<uses-permission android:name="android.permission.MANAGE_VOICE_KEYPHRASES" />
然后,需要在SpeechRecognizer中添加特殊的配置参数:
SpeechRecognizer speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
speechRecognizer.setRecognitionListener(new RecognitionListener() {
@Override
public void onResults(Bundle results) {
if (results != null && !results.isEmpty()) {
// 处理识别结果
}
}
//其他的回调方法
});
// 需要添加以下配置参数
Bundle extras = new Bundle();
extras.putParcelable(RecognitionManager.EXTRA_SUPPORTS_MANAGING_VOICE_KEYPHRASES, true);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
speechRecognizer.startListening(intent, extras);
通过添加这些参数,可能会解决在SpeechRecognizerListener的onResults()回调中返回空白Bundle的问题。