在android 13之前,我可以使用意图RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS通过广播接收器成功获取支持的语言。在 Android 13 上,额外内容为空。代码如下:
public class LanguageDetailsChecker extends BroadcastReceiver {
// for API < 13;
@Override
public void onReceive(Context context, Intent intent) {
Bundle results = getResultExtras(true);
if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE)) {
//languagePreference = results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE);
}
if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) {
//supportedLanguages = results.getStringArrayList( RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
}
}
}
我当然看到了 Android 13 的新 API:
speechRecognizer.checkRecognitionSupport(testIntent, Executors.newSingleThreadExecutor(), new RecognitionSupportCallback() {
@Override
public void onSupportResult(@NonNull RecognitionSupport recognitionSupport) {}
@Override
public void onError(int error) {
Log.e(LOG_TAG, " onError >>>>>>>>>>>> ?? " + error);
}
});
这总是让我陷入 onError,代码为 14。
顺便说一句,相同的 API 非常适合三星语音识别器(AiAiSpeechRecognitionService),我正在与 Google 服务一起测试它。
我已阅读this,其中指出 SpeechService 已被删除,但与此同时他们引入了应用程序来替换该服务,此外,他们还引入了新的 API (
checkRecognitionSupport
),这似乎不断产生错误。
我已经阅读了this,它没有给我关于如何使用新 API 的提示。
非常感谢任何帮助。
我还在新的 checkRecognitionSupport API 上收到错误 14,但我能够让它在设备识别器上工作。这是一个代码示例。
if ( SpeechRecognizer.isOnDeviceRecognitionAvailable(context)) {
var recognizer = createOnDeviceSpeechRecognizer(context)
var recognizerIntent =
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
recognizer?.checkRecognitionSupport(recognizerIntent,
Executors.newSingleThreadExecutor(),
object : RecognitionSupportCallback {
override fun onSupportResult(recognitionSupport: RecognitionSupport) {
// use recognitionSupport.supportedOnDeviceLanguages
// or any of the other properties of recognitionSupport
}
override fun onError(error: Int) {
// handle error conditions
}
})
}
我和你在同一条船上,看来你必须使用
的粗暴字典块引用 EXTRA_LANGUAGE 添加到 API 级别 3
公共静态最终字符串EXTRA_LANGUAGE 可选的 IETF 语言标签(由 BCP 47 定义),例如“en-US”。此标签通知识别器以不同于 Locale.getDefault() 中设置的语言执行语音识别。
常量值:“android.speech.extra.LANGUAGE”
如果您有任何其他方式,欢迎您。