我需要在我的应用程序中知道在设备中选择了哪种语言,很容易检测到主要语言:
Locale.getDefault().getLanguage()
但我需要的是语言列表,我知道Android中的这个功能是在Lollipop中引入的(我认为):
所以对于我的手机(查看图片)我希望得到一个列表:“en”,“it”
这可能吗?提前致谢
答案 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);
当本地更改时,使用此选项进行广播。