在仍然使用Android资源的情况下,是否可以通过编程方式更改应用程序的语言?

如果没有,是否可以以特定语言请求资源?

我想让用户改变应用程序的语言从应用程序。

六个六六个六提问于
Bilibili科技莫道君行早,更有早行人回答于

我正在寻找一种以编程方式更改系统语言的方法。虽然我完全理解一个正常的应用程序不应该这样做,但是它也不应该这样做:

  • 应该(通过意图)将用户指向系统设置,以手动更改系统设置。
  • 应用程序应该像Alex的答案所描述的那样,单独处理它的本地化。

有必要通过编程来真正改变系统的语言。

这是无文档化的API,因此不应用于市场/最终用户应用程序!

总之,我找到了解决办法:

  Locale locale = new Locale(targetLocaleAsString);

  Class amnClass = Class.forName("android.app.ActivityManagerNative");
  Object amn = null;
  Configuration config = null;

  // amn = ActivityManagerNative.getDefault();
  Method methodGetDefault = amnClass.getMethod("getDefault");
  methodGetDefault.setAccessible(true);
  amn = methodGetDefault.invoke(amnClass);

  // config = amn.getConfiguration();
  Method methodGetConfiguration = amnClass.getMethod("getConfiguration");
  methodGetConfiguration.setAccessible(true);
  config = (Configuration) methodGetConfiguration.invoke(amn);

  // config.userSetLocale = true;
  Class configClass = config.getClass();
  Field f = configClass.getField("userSetLocale");
  f.setBoolean(config, true);

  // set the locale to the new value
  config.locale = locale;

  // amn.updateConfiguration(config);
  Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);
  methodUpdateConfiguration.setAccessible(true);
  methodUpdateConfiguration.invoke(amn, config);

回答过的其他问题

如何给数据加密技术选择并使用密钥为防止数据库数据外泄?

Bilibili科技莫道君行早,更有早行人
在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文。目前主流加密手段大致可分为单向加密和双向加密。 单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:Base64,MD5,SHA; 双向加密:与单向加密相反,可以把...... 展开详请

如何看待小程序云开发开放之后带来的影响?

Bilibili科技莫道君行早,更有早行人
简单来说,小程序开发者借助「云开发」可完成小程序开发,无需自行搭建服务器,即可实现小程序快速开发和迭代。 云开发平台对开发者有哪些好处? 1.开发成本将降低 在以前,小程序开发者开发一款小程序,需要接触到诸如:域名备案、数据库运维、服务器运维、后端开发、打包发布等等工作,但在「云...... 展开详请

如何寻找最适合自身的云应用模式?

Bilibili科技莫道君行早,更有早行人
公有云:有云开放给所有公众成员。 这种云计算模式由拥有极其庞大数据中心的服务商运营,其中的计算和存储资源在客户之间进行共享。 私有云:私有云是一个公司使用的特定云环境。不同于公有云模式中共享的设施使用,私有云模式中每个公司使用的服务器或存储应用都是单独的。 托管私有云:一些公司会...... 展开详请

实时音视频产品优势是什么?

Bilibili科技莫道君行早,更有早行人

好像可以通过web接入与报警市民进行双向音视频通话,方便市民在一些不方便打字或者电话的场景下报警。

区块链电子发票,对比传统发票有何优势?

Bilibili科技莫道君行早,更有早行人
此前发票的流转场景特征是:参与方多,流转周期长,各参与方之间信息不互通,存在篡改等痛点。区块链是一种不可篡改防抵赖防删除的分步式账本技术,如今作为区块链电子发票的底层核心技术,可以发挥两个核心作用: 1. 确保发票唯一,从领票、开票到流转、入账、报销、全环节流转状态完整可追溯; ...... 展开详请

Python模块和Python包有什么区别?

Bilibili科技莫道君行早,更有早行人
模块是在一个导入下导入并使用的单个文件(或多个文件)。例如 import my_module 包是一个包含层次结构的目录中的模块集合。 from my_package.timing.danger.internets import function_of_love Docume...... 展开详请

关于作者

Bilibili科技

莫道君行早,更有早行人

所属标签

扫码关注云+社区