如何在更改应用程序区域设置后获得设备区域设置



我正在根据用户选择更改应用程序区域设置。

使用

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;
  }
}

注意deprecationNewApi的注释。一旦您的目标是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();

相关内容

  • 没有找到相关文章

最新更新