Detect installed languages for offline 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。有什么想法吗?
推荐答案
如果您有超级用户(抱歉),您可以这样做:
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包含什么内容?如果它正确返回,您可能只需伪造网络管理器。
这篇关于检测已安装的语言以进行脱机识别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!