gpt4 book ai didi

android - 没有 Google Apps 的 Android 设备上的 SpeechRecognizer

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:55:54 25 4
gpt4 key购买 nike

SpeechRecognizer 在装有 Google Apps (GApps) 的 Android 上运行良好。然而在中国,大部分安卓设备都会删除这些谷歌应用程序。使用 SpeechRecognizer 时会发生什么?我如何在没有实际设备的情况下对其进行测试?

speechRecognizer = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
speechRecognizer.setRecognitionListener(new CustomListener());
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "zh_HK");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, false);
intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"zh_HK", "en-US"});
speechRecognizer.startListening(intent);

其中 CustomListener() 实现了 RecognitionListener

最佳答案

我相信您了解以下大部分内容,但为了全面回答:

任何应用程序都可以注册为 Speech Recognition Provider,只要它注册了一个 RecognitionService。正确。对于三星设备,Android 语音搜索设置将显示两个提供商,Google 和 Vlingo。

Google 的 RecognitionService 打包在他们的 Google 'Now' 中如您所知,该应用程序依赖于 Google Play 服务。

Vlingo 的 RecognitionService 位于他们的 S-Voice 应用程序中,该应用程序仅公开预装在三星设备上 - 因此并不真正适用于您的问题,但我在下面的评论中提到了这一点。

在使用 SpeechRecognizer 之前,您应该始终使用静态辅助方法:

if (SpeechRecognizer.isRecognitionAvailable(getApplicationContext())) {
// initialise
} else {
// nope
}

引用自method documentation :

Checks whether a speech recognition service is available on the system. If this method returns false, createSpeechRecognizer(Context) will fail.

Returns true if recognition is available, false otherwise

如果您在特定用例中使用此方法,它应该返回 false,因此您不必担心初始化崩溃。

请注意,Vlingo 将在此处返回 true,但实际上永远不会返回语音响应,它只会抛出 ERROR_NETWORK。由于某些原因。这很烦人。

除了上述检查之外,您还可以通过执行以下操作来查询哪些应用程序已注册为语音识别提供程序(如果有):

final List<ResolveInfo> services = context.getPackageManager().queryIntentServices(
new Intent(RecognitionService.SERVICE_INTERFACE), 0);

任何空列表,都意味着没有提供者可用。

最后,如评论中所述,您始终可以三重检查并确保安装了 Google 应用程序:

假设您的目标是 Jelly Bean+,我使用以下便捷方法:

/**
* Check if the user has a package installed
*
* @param ctx the application context
* @param packageName the application package name
* @return true if the package is installed
*/
public static boolean isPackageInstalled(@NonNull final Context ctx, @NonNull final String packageName) {
try {
ctx.getApplicationContext().getPackageManager().getApplicationInfo(packageName, 0);
return true;
} catch (final PackageManager.NameNotFoundException e) {
return false;
}
}

其中 Google 的包名是 com.google.android.googlequicksearchbox

最后,我相信您知道还有许多其他语音识别提供商,您可以使用它们提供的 RESTful 服务,而不是让用户侧载 gapps 令人头疼。并非所有都是免费的。

关于android - 没有 Google Apps 的 Android 设备上的 SpeechRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37856993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com