SpeechRecognizer没有谷歌Apps的Android设备上SpeechRecognize

2019-05-12 02:54发布

SpeechRecognizer效果很好在Android与谷歌企业应用套件(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

Answer 1:

我敢肯定,你是知道的最以下的,但对于一个全面的答案的缘故:

任何应用程序可以作为语音识别的提供者,只要其寄存器中的寄存器, RecognitionService正确。 在三星设备的情况下,Android的语音搜索设置会显示两个供应商,谷歌和Vlingo的。

谷歌的RecognitionService是其内包装的谷歌“现在”的应用程序,这是大家都知道,是依赖于谷歌播放服务。

Vlingo的的RecognitionService是它们的S-Voice的应用程序,这是唯一可以公开预装在三星设备中-所以不是真的适用于你的问题,但我提到由于我的评论进一步下降。

在你使用SpeechRecognizer ,你应该总是使用静态辅助方法:

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

正如引述方法的文档 :

检查语音识别服务是否可用在系统上。 如果此方法返回false,createSpeechRecognizer(上下文)将失败。

如果承认是可用的,否则为假,则返回true

如果您在特定使用情况下使用这种方法,它应该返回假的,所以你不必担心初始化崩溃。

作为一个说明,Vlingo的将返回true这里,但从来没有真正恢复的语音响应,它只是抛出ERROR_NETWORK出于某种原因。 它很烦人。

除了上面的检查,你也可以查询,如果有的话,申请登记为执行以下操作,语音识别提供商:

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

任何空单,就意味着没有供应商可供选择。

最后,在评论中提到的,你总是可以高音检查,并确保谷歌应用程序安装:

假设你靶向果冻豆+我用下面的便捷方法:

/**
 * 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;
    }
}

当谷歌的软件包名称是com.google.android.googlequicksearchbox

非常最后,而不是让用户侧负荷GAPPS的头痛,我敢肯定你知道还有很多其他的语音识别提供商在那里,你可以使用谁提供RESTful服务。 并非所有的都是免费的通过。



文章来源: SpeechRecognizer on Android device without Google Apps