区域设置未在已签名的APK中更改

时间:2018-11-22 20:24:17

标签: android locale

我有一个包含4种语言的android应用,即英语,印地语,古吉拉特语和马拉地语。 我的res文件夹中有4个字符串文件,当我在调试模式下直接将代码运行到设备上时,效果很好。但是,当我签署apk并将其发布到playstore上并尝试下载时,它不起作用。

这是我用于设置语言环境的代码:

public class BaseActivity extends AppCompatActivity {
    public SharedPreferences sharedpreferences;
    public static final String MyPREFERENCES = "MyPrefs";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
        String lang = sharedpreferences.getString("lang","en");
        System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : "+lang);

        Locale locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
    }
}

我将此BaseActivity扩展到我使用的所有活动。 因此,我无法弄清为什么它在调试中可以正常工作,而在签名的apk中却不能正常工作。

1 个答案:

答案 0 :(得分:1)

使用

 getApplicationContext().getResources().updateConfiguration(config,
              getApplicationContext().getResources().getDisplayMetrics());

代替

 getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());

因为

  

getApplicationContext()-返回所有活动的上下文   在应用程序中运行。

  

getBaseContext()-如果要从另一个上下文访问上下文   在您可以访问的应用程序中。