更改语言三星S8 +

时间:2019-09-17 12:15:51

标签: java android android-studio sharedpreferences locale

我在Samsung S8 +(android 9.0)中遇到更改语言的问题。 我已将一个版本 .aab (“ Android应用捆绑格式”)文件扩展名上传到“我的应用”的Google Play商店中。 现在,我可以在Play商店上购买此应用程序,并且可以轻松下载。 我已经在多个设备上安装了此应用程序,并且运行良好。

但是当我更改语言时,Samsung S8 +设备无法正常工作。 在我们的应用程序中,我们使用英语和日语两种语言,但是为什么不能在我不知道的Samsung S8 +设备上运行,而在另一台设备上它的效果很好。

然后,我在三星S8 +上安装了版本 .apk ,并且可以正常工作。因此,我想知道为什么 .aab 不起作用而 .apk 为什么起作用。请给出答案。

请检查使用的代码

这是更改语言的基本方法

public void updateLocale() {
    String locality = MyApplication.getInstance().getSharedPref().getLanguage();
    if (locality != null && !locality.isEmpty() && locality.equals(Locale.ENGLISH.toString())) {
        Configuration configuration = getResources().getConfiguration();
        if (Build.VERSION.SDK_INT >= 17) {
            configuration.setLocale(new Locale(Locale.ENGLISH.toString()));
        } else {
            configuration.locale = new Locale(Locale.ENGLISH.toString());
        }
        getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
        onConfigurationChanged(configuration);
    } else {
        Configuration configuration = getResources().getConfiguration();
        if (Build.VERSION.SDK_INT >= 17) {
            configuration.setLocale(new Locale(Locale.JAPANESE.toString()));
        } else {
            configuration.locale = new Locale(Locale.JAPANESE.toString());
        }
        getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
        onConfigurationChanged(configuration);
    }
}

在“更改语言”屏幕上

Switch svChangeLang;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSharedPref = new SharedPreference(getApplicationContext());
    svChangeLang = (Switch) findViewById(R.id.sv_change_lang);

    String lanCode = mSharedPref.getLanguage();
    if (lanCode.equals(Locale.ENGLISH.toString()))
        svChangeLang.setChecked(true);
    else
        svChangeLang.setChecked(false);

    svChangeLang.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (!isChecked)
                svChangeLang.setChecked(false);
            else
                svChangeLang.setChecked(true);
            mSharedPref.setLanguage(isChecked ? Locale.ENGLISH.toString() : 
            Locale.JAPANESE.toString());

            updateLocale();
        }
     });
   }

1 个答案:

答案 0 :(得分:0)

默认情况下,这对于应用程序捆绑包是不可能的:只有在设备的所选语言发生更改时,Google Play才会下载资源。

Solution First

第二解决方案:

android {
bundle {
    language {

        enableSplit = false
    }
}

}

但是第二个解决方案增加了应用程序的显示效果