如何在android中获取系统的区域设置(不是应用程序' s)

时间:2016-06-01 07:59:29

标签: android locale

我正在编写一个带有选项菜单的应用程序,有三种语言选项:自动,英语,希腊语。

当用户更改设置时,我将其保存在共享首选项中,并使用新任务标志调用我的开始活动

当该活动开始时(甚至在setContentView之前),我调用以下方法:

        string language = MainApplication.Language; //this is from shared preferences
        if (language == null || language.Equals("auto")) {
            language = Java.Util.Locale.Default.Language; //if language is not set, or the setting is auto then load the default language
            MainApplication.Language = "auto"; //save into the shared preferences that the language was set to auto
        }
        App.instance.set_language(language); //update the data layer's language
        Java.Util.Locale locale = new Java.Util.Locale(language); 
        Java.Util.Locale.Default = locale; //change the default locale
        Configuration config = new Configuration();//create a new configuration and set its locale
        config.Locale = locale;
        Application.Context.Resources.UpdateConfiguration(config, null);//update the system locale

以上内容是用Xamarin编写的,所以它是C#但它与java的代码相同

我的问题是,如果我将语言更改为例如,当上面的代码运行时,它将默认语言环境设置为" el" ,但如果用户在此之后选择自动选项,因为应用程序的默认语言环境是" el"它保留了这个设置,即使我的系统语言是英语。

当我重新启动应用程序时,它可以正常工作,因为应用程序的默认语言环境是系统的语言环境

所以我的问题是,有没有办法获得系统的语言环境,而不是应用程序?

P.S。我知道我总是可以在Application中存储系统的语言环境并在OnConfigurationChanged中更改它,如果有另一种方式我只是在徘徊

1 个答案:

答案 0 :(得分:1)

您可以通过adb shell getprop | grep locale

获取

它将打印类似的输出,如:

[persist.sys.locale]: [tr-TR]
[ro.product.locale]: [tr-TR]

所以你可以运行一个过程:

Process process = Runtime.getRunTime().exec("getprop");

并使用BufferedReader检查输出字符串。

或基本上检查此answer