我正在根据用户选择更改应用程序区域设置。独立于设备区域设置。
使用
public void setDefaultLocale(Context context, String locale) {
Locale appLoc = new Locale(locale);
Locale.setDefault(appLoc);
Configuration appConfig = new Configuration();
appConfig.locale = appLoc;
context.getResources().updateConfiguration(appConfig,
context.getResources().getDisplayMetrics());
}
但我想知道设备区域设置也是什么。
当我试图得到这个时,我总是得到我设置为应用程序的语言环境。
例如:应用程序位于 ENGLISH ,设备位于 中文 。 我总是得到 英语 。
用于获取语言环境,
选项1。
String locale = context.getResources().getConfiguration().locale.getCountry();
选项2。
String local_country = ((Activity) context).getBaseContext().getResources().getConfiguration().locale.getCountry();
任何帮助都将受到高度赞赏!!!
答案 0 :(得分:7)
我问过类似的东西并找到了答案,对不起,如果已经晚了:
要查找系统区域设置,请使用:
defaultLocale = Resources.getSystem().getConfiguration().locale;
无论为app / activity设置了哪个默认语言环境,它都会获得系统区域设置。
答案 1 :(得分:6)
我绝对不确定这对不同设备的可移植性如何:
try {
Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
Log.e("", "Device locale: "+locale);
} catch (IOException e) {
e.printStackTrace();
}
如果你想要国家部分:persist.sys.country
答案 2 :(得分:1)
如果您需要在Android 7.0以下支持-Nougat(API级别24),则可以使用以下代码:
@SuppressWarnings("deprecation")
@SuppressLint("NewApi")
// ToDo: Adjust this method once the target API is 24 or higher!
private Locale getLocale()
{
if(Build.VERSION.SDK_INT >= 24)
{
return Resources.getSystem().getConfiguration().getLocales().get(0);
}
else
{
return Resources.getSystem().getConfiguration().locale;
}
}
请注意有关deprecation
和NewApi
的注释。以API 24或更高版本为目标后,请调整此方法。受this答案的启发。
答案 3 :(得分:0)
对于那些使用Daniel Fekete
的解决方案的人来说:
Process exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.language"});
String locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();
请注意最新Android Api(+21)上的区域设置可能 EMPTY !而不是使用persist.sys.language
使用 persist.sys.locale
exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();