4.在APP中更改系统语言

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());
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值