检测已安装的语言以进行脱机识别 [英] Detect installed languages for offline recognition

查看:31
本文介绍了检测已安装的语言以进行脱机识别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

    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。有什么想法吗?

推荐答案

如果您有超级用户(抱歉),您可以这样做:

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.2Recognizer.java source改编的:

  • 返回简单布尔值,而不是字典目录
  • 接受字符串输入(例如"en_US")而不是区域设置

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

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


编辑:出于好奇,如果处于脱机状态,Extra_Support_Languages包含什么内容?如果它正确返回,您可能只需伪造网络管理器。

这篇关于检测已安装的语言以进行脱机识别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆