可以通过代码确定设备上当前安装的语言包是什么?试过这个:

    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/文件夹,它们都与我安装的词典匹配。
当然,缺点是它只对root有效,所以我不确定这最终对您有多大帮助。我真的不知道该对非根说些什么,我什么也找不到。
编辑:不过,出于好奇,如果您离线,额外支持的语言包含什么?如果它返回正确,您可能只需要伪造网络管理器。

07-26 07:45