【Android】切换系统全局语言设置

前两种为应用内部处理,第三种为发送广播由系统服务进行处理

使用反射

这种会直接将安卓设置内的语言列表清空,然后将选择的语言设置为系统语言

该方法存在问题,在首次开机后设置会导致国外应用进不去(只对于here地图个别版本)

java 复制代码
    /**
     * 设置语言,使用反射
     * @param mLocale CHINESE ENGLISH
     */
    public void setLanguage(Locale mLocale) {
        try {
            Class localPicker = Class.forName("com.android.internal.app.LocalePicker");
            Method updateLocale = localPicker.getDeclaredMethod("updateLocale",
                    Locale.class);
            updateLocale.invoke(null,mLocale);
        } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException
                | IllegalAccessException e) {
            e.printStackTrace();
        }
    }

更新语言列表方式

参考安卓设置方法进行移植,该方法需要系统的framework的jar包支持

java 复制代码
/*
** 获取系统语言列表,并将选择的语言加入进去
*/
private List<LocaleStore.LocaleInfo> getUserLocaleList(Context context) {
    final List<LocaleStore.LocaleInfo> result = new ArrayList<>();

    final LocaleList localeList = LocalePicker.getLocales();
    for (int i = 0; i < localeList.size(); i++) {
        //判断列表中是否有重复项,如有,略过
        Locale locale = localeList.get(i);
        if (locale.getLanguage().equals("en")) {
            continue;
        }
        result.add(LocaleStore.getLocaleInfo(locale));
    }
    Locale mLocale = new Locale("en","EN");
    result.add(0,LocaleStore.getLocaleInfo(Locale.ENGLISH));

    return result;
}

调用

java 复制代码
List<LocaleStore.LocaleInfo> mFeedItemList = getUserLocaleList(getApplicationContext());
int count = mFeedItemList.size();
Locale[] newList = new Locale[count];
for (int i = 0; i < count; i++) {
    final LocaleStore.LocaleInfo li = mFeedItemList.get(i);
    newList[i] = li.getLocale();
}
LocaleList ll = new LocaleList(newList);
LocaleList.setDefault(ll);
LocalePicker.updateLocales(ll);

系统服务进行处理

  • 参考系统恢复默认设置处理

系统/安卓设置内流程

流程未研究,待定

该条目参考文章:Android Settings(设置)语言的切换和添加原理流程简析

相关推荐
renxhui2 小时前
Android 性能优化(四):卡顿优化
android·性能优化
二流小码农2 小时前
鸿蒙开发:UI界面分析利器ArkUI Inspector
android·ios·harmonyos
CYRUS_STUDIO2 小时前
FART 精准脱壳:通过配置文件控制脱壳节奏与范围
android·安全·逆向
小疯仔2 小时前
使用el-input数字校验,输入汉字之后校验取消不掉
android·开发语言·javascript
墨狂之逸才3 小时前
Data Binding Conversion 详解
android
iceBin3 小时前
uniapp打包安卓App热更新,及提示下载安装
android·前端
杨充3 小时前
高性能图片优化方案
android
墨狂之逸才4 小时前
BindingAdapter名称的对应关系、命名规则和参数定义原理
android
hellokai4 小时前
ReactNative介绍及简化版原理实现
android·react native
阿豪元代码5 小时前
Perfetto 上手指南3 —— CPU 信息分析
android