我正在根据用户选择更改应用程序区域设置。
使用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());
}
但是我还想知道设备区域设置是什么
当我试图得到这个时,我总是得到我设置为application的区域设置。
示例:应用程序为英文,设备为中文。我总是得到英语
用于使用
获取区域设置选项1。
String locale = context.getResources().getConfiguration().locale.getCountry();
选项2。
String local_country = ((Activity) context).getBaseContext().getResources().getConfiguration().locale.getCountry();
任何帮助将非常感激!!
我问了类似的问题,发现了这个答案,抱歉,如果晚了:
查找系统区域设置,使用:
defaultLocale = Resources.getSystem().getConfiguration().locale;
它获取系统区域设置,不管应用/活动的默认区域设置是什么
我完全不确定这在不同设备上的可移植性:
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
如果你需要支持Android 7.0以下版本的牛轧糖(API level 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或更高版本,请调整此方法。受到这个答案的启发
对于正在使用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 !使用 persistent .sys.locale
代替persist.sys.language
exec = Runtime.getRuntime().exec(new String[]{"getprop", "persist.sys.locale"});
locale = new BufferedReader(new InputStreamReader(exec.getInputStream())).readLine();
exec.destroy();