当前位置: 首页 > news >正文

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

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

使用反射

这种会直接将安卓设置内的语言列表清空,然后将选择的语言设置为系统语言
该方法存在问题,在首次开机后设置会导致国外应用进不去(只对于here地图个别版本)

    /*** 设置语言,使用反射* @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包支持

/*
** 获取系统语言列表,并将选择的语言加入进去
*/
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;
}

调用

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(设置)语言的切换和添加原理流程简析

http://www.lryc.cn/news/307585.html

相关文章:

  • 【递归】【回溯】Leetcode 112. 路径总和 113. 路径总和 II
  • AxureCloud配置文件详细介绍
  • Centos开机网卡自启动失败
  • 华为OD技术面试案例3-2024年
  • 全面升级!Apache HugeGraph 1.2.0版本发布
  • WinCC如何与三菱Q系列PLC进行以太网通讯
  • Spring11、整合Mybatis
  • C语言练习:(力扣645)错误的集合
  • 广和通发布基于MediaTek T300平台的RedCap模组FM330系列及解决方案
  • 代码随想录训练营第六十三天打卡|503.下一个更大元素II 42. 接雨水
  • 【web】nginx+php环境搭建-关键点(简版)
  • 1、什么是ETF?
  • 备战蓝桥杯Day18 - 双链表
  • 【大数据】Flink 内存管理(二):JobManager 内存分配(含实际计算案例)
  • (2024,Sora 逆向工程,DiT,LVM 技术综述)Sora:大视觉模型的背景、技术、局限性和机遇回顾
  • MySQL基础(二)
  • el-table 多选表格存在分页,编辑再次操作勾选会丢失原来选中的数据
  • 备战蓝桥杯————如何判断回文链表
  • linux 文本编辑命令【重点】
  • C#面:ref 和 out 的区别
  • php脚本输出中文在浏览器中显示乱码
  • 【Unity每日一记】角色控制器Character Contorller
  • Kafka入门介绍一
  • leetcode 3.反转链表;
  • 【蓝桥杯】快读|min和max值的设置|小明和完美序列|​顺子日期​|星期计算|山
  • 半小时到秒级,京东零售定时任务优化怎么做的?
  • stm32——hal库学习笔记(ADC)
  • 一周学会Django5 Python Web开发-Http请求HttpRequest请求类
  • element el-date-picker 日期组件置灰指定日期范围、禁止日期范围日期选择
  • 202434读书笔记|《繁星·春水》——残花缀在繁枝上,鸟儿飞去了,撒得落红满地,生命也是这般的一瞥么?