android - 检测已安装的语言以进行离线识别

标签 android speech-recognition

是否可以通过代码确定设备上当前安装了哪些语言包?试过这个:

    Intent detailsIntent =  new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
    sendOrderedBroadcast(detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null);

    public class LanguageDetailsChecker extends BroadcastReceiver  {

    private List<String> supportedLanguages;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle results = getResultExtras(true);
        if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES))
        {
            supportedLanguages =results.getStringArrayList(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
            Log.d("TAG","languages: " + supportedLanguages);
        }
    }
}

但是,输出显示了很多语言,而我只安装了 en_UK、en_US 和 es_ES。有什么想法吗?

最佳答案

如果你有 root(抱歉),你可以这样做:

public static boolean isOfflineDictionaryPresent(String language) {
    if (locale == null) locale = Locale.US;
    String dir = "/system/usr/srec/config/" +
            language.replace('_', '.').toLowerCase();
    if ((new File(dir)).isDirectory()) return true;
    return false;
}

这是从 Android 4.2.2 中删除的 Recognizer.java source并修改:

  • 返回一个简单的 bool 值而不是字典目录
  • 采用字符串输入(例如“en_US”)而不是语言环境

我会像您一样获取完整列表,然后遍历它们以检查哪些可以离线使用。我检查了两台设备上的 /system/usr/srec/config/ 文件夹,它们都与我安装的词典匹配。

当然,缺点是它只对root有效,所以我不确定这最终对你有多大帮助。对于非 root 用户,我真的不知道该说些什么,我找不到任何东西。


编辑:不过出于好奇,如果您离线,EXTRA_SUPPORTED_LANGUAGES 包含什么?如果它正确返回,您可能只需要伪造网络管理员。

关于android - 检测已安装的语言以进行离线识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803487/

相关文章:

java - 第二次加载时进度条失败

java - Switch.java在android studio中出现错误

android - 如何在 AndroidManifest.xml 中隐藏 API key

matlab - 将神经网络应用于可变长度语音片段的 MFCC

c# - 必应语音识别服务 - SpeechClient 问题 "Audio format could not be parsed."

android - 在编辑文本中动态设置背景属性为透明

android - WebView 在某些 Android 设备上不加载图像或 css

java - 如何在java中使用sphinx和freetts管理hello.gram以进行对话

speech-recognition - 识别多人的声音

java - 隐马尔可夫模型阈值化