Activity代码:
import android.app.backup.BackupManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.LocaleList;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import androidx.annotation.Nullable;
import java.lang.reflect.Method;
import java.util.Locale;
public class LanguageSettingActivity extends BaseActivity
implements RadioGroup.OnCheckedChangeListener {
private static final String TAG = "LanguageSelectActivityByMy";
private static final String ACTIVITY_MANAGER_NATIVE = "android.app.ActivityManagerNative";
private static final String GET_DEFAULT = "getDefault";
private static final String GET_CONFIGURATION = "getConfiguration";
private static final String IACTIVITY_MANAGER = "android.app.IActivityManager";
private static final String RES_CONFIGURATION = "android.content.res.Configuration";
private static final String USER_SET_LOCALE = "userSetLocale";
private static final String UPDATE_PERSISTENT_CONFIGURATION = "updatePersistentConfiguration";
private static final String PROVIDER_SETTINGS = "com.android.providers.settings";
private RadioGroup mRadioGroup;
private Button mBtnNext;
private CameraSetting mCameraSetting;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//TODO
getData();
initDate();
}
private void getData() {
}
@Override
public int getLayoutId() {
return R.layout.activity_language_select_by_my;
}
@Override
protected void initView() {
mRadioGroup = findViewById(R.id.language_rgp_my);
mRadioGroup.setOnCheckedChangeListener(this);
mBtnNext = findViewById(R.id.btn_next_language);
mBtnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(LanguageSettingActivity.this, GpsActivity.class);
startActivity(intent);
}
});
}
/**
* Get the selected button from sp.
*/
private void initDate() {
mCameraSetting = CameraApp.getInstance().getCameraSettingInstance();
((RadioButton) mRadioGroup.getChildAt(mCameraSetting.getCommonLanguageSwitch()
.ordinal())).setChecked(true);
}
/**
* Change language.
*
* @param group radioGroup.
*/
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
Locale locale;
switch (checkedId) {
case R.id.rbtn_language_jp_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.JA);
locale = Locale.JAPAN;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_en_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.EN_RUS);
locale = Locale.US;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_de_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.DE);
locale = Locale.GERMANY;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_fr_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.FR);
locale = Locale.FRANCE;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_it_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.IT);
locale = Locale.ITALY;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_zhtw_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.ZH_RTW);
locale = Locale.TRADITIONAL_CHINESE;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_zhcn_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.ZH_RCN);
locale = Locale.SIMPLIFIED_CHINESE;
changeSystemLanguage(locale);
break;
case R.id.rbtn_language_ko_my:
mCameraSetting.setCommonLanguageSwitch(CommonLanguageSwitch.KO);
locale = Locale.KOREA;
changeSystemLanguage(locale);
break;
default:
break;
}
}
/**
* Change the language.
*
* @param locale Locale.
*/
private void changeSystemLanguage(Locale locale) {
if (locale != null) {
try {
Class classActivityManagerNative = Class.forName(ACTIVITY_MANAGER_NATIVE);
Method getDefault = classActivityManagerNative.getDeclaredMethod(GET_DEFAULT);
Object objIActivityManager = getDefault.invoke(classActivityManagerNative);
Class classIActivityManager = Class.forName(IACTIVITY_MANAGER);
Method getConfiguration = classIActivityManager.getDeclaredMethod(GET_CONFIGURATION);
Configuration config = (Configuration) getConfiguration.invoke(objIActivityManager);
config.setLocales(new LocaleList(locale));
Class clzConfig = Class
.forName(RES_CONFIGURATION);
java.lang.reflect.Field userSetLocale = clzConfig
.getField(USER_SET_LOCALE);
userSetLocale.set(config, true);
Class[] clzParams = {Configuration.class};
Method updatePersistentConfiguration =
classIActivityManager.getDeclaredMethod(UPDATE_PERSISTENT_CONFIGURATION, clzParams);
updatePersistentConfiguration.invoke(objIActivityManager, config);
BackupManager.dataChanged(PROVIDER_SETTINGS);
} catch (Exception exception) {
Logger.d(TAG,exception.getMessage());
}
}
}
}