是否可以检测Android设备中选择的语言?

时间:2017-03-28 06:13:45

标签: android locale

我需要在我的应用程序中知道在设备中选择了哪种语言,很容易检测到主要语言:

Locale.getDefault().getLanguage()

但我需要的是语言列表,我知道Android中的这个功能是在Lollipop中引入的(我认为):

languages

所以对于我的手机(查看图片)我希望得到一个列表:“en”,“it”

这可能吗?提前致谢

2 个答案:

答案 0 :(得分:1)

在Android版本> = N上,您可以获取区域设置列表,但您也必须提供较低的API级别。

这应该可行,但是如果你想从列表中找到一个特定的Locale,你可以在那里做到并避免复制到List中。

final List<Locale> locales;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    final LocaleList list = getResources().getConfiguration().getLocales();
    locales = new ArrayList<>(list.size());
    for (int i = 0; i < list.size(); i++) {
        locales.add(list.get(i));
    }
} else {
    locales = Collections.singletonList(getResources().getConfiguration().locale);
}

(您可能需要将getResources()更改为context.getResources(),具体取决于您使用代码的位置)

答案 1 :(得分:0)

BroadcastReceiver localeChangeBroadcastReceiver = new BroadcastReceiver(){

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) {

            Locale currentLocale = Locale.getDefault();
            // Notify the locale change where you want.
            onLocaleChanged(currentLocale);

        }

    }
};

     private final IntentFilter localeChangeFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
        registerReceiver(localeChangeBroadcastReceiver, localeChangeFilter);

当本地更改时,使用此选项进行广播。