android 如何修改系统语言

最近有需求需要去编程实现根据选择去修改系统语言, 根据查资料看setting源码有两种方式, 在这里记录一下. 修改系统语言或者控制系统开关机等操作即使声明了对应权限还是会报错, 这是因为这些操作需要系统权限,这里也会介绍如何使用android studio对应用进行系统签名.

一.如何查看系统的配置信息?

在终端使用adb shell getprop命令可以查看系统配置信息, 我们会得到类似下面的输出:

[persist.sys.language]: [en]
[persist.sys.localevar]: []
[persist.sys.operator]: [xxx]
[persist.sys.synctimetype]: [xxx]
[persist.sys.timezone]: [xxx]
[persist.sys.usb.config]: [xxx]
[ro.adb.secure]: [0]
[ro.allow.mock.location]: [0]
[ro.baseband]: [unknown]
[ro.board.platform]: [xxxxxxx]
[ro.boot.bootloader]: [xxxxxxxxx]

以ro开头的只能读取值,不能进行修改, 以 persist开头是保留值可以修改.
我们看到 persist.sys.language 的值标记了当前系统的语言.

那么如何去读取这个配置文件的信息呢?
在这里介绍两种方式:
(1)使用反射

    public static String getSystemProp(final String key, final String defaultValue) {try {if (getStringPropMethod == null) {getStringPropMethod = Class.forName("android.os.SystemProperties").getMethod("get", String.class, String.class);}return (String) getStringPropMethod.invoke(null, key, defaultValue);} catch (Exception e) {Log.e(TAG, Log.getStackTraceString(e));return defaultValue;}}

getSystemProp的第一个参数是属性文件的前面的字符串, 第二个参数为默认值, 例如如果想要获取系统当前语言:
getSystemProp(“persist.sys.language”, “zh”);

(2) 使用SystemProperties
SystemProperties 需要手动去引入它所依赖的jar包. 在 android studio中的配置步骤:
在工程的build.gradle中添加:
①在dependencies中添加引入函数:
dependencies {
……
provided files(getLayoutLibPath())
}
② 定义引入函数与引入的编码
tasks.withType(JavaCompile) {
options.encoding = “UTF-8”
}

def getLayoutLibPath() {
return “${android.getSdkDirectory().getAbsolutePath()}” + “/platforms/” + android.compileSdkVersion + “/data/layoutlib.jar”
}

配置成功后, 可以直接使用SystemProperties来获取系统配置文件中的信息.
获取系统语言:
SystemProperties.get(“persist.sys.language”, “zh”); //第二个参数为默认值

SystemProperties不但可以获取配置文件的信息, 而且可以去修改配置文件, 注意: 以ro开头的不能修改.
SystemProperties.set(“persist.sys.language”, “zh”); //将系统语言改成中文, 需要重启系统才能生效

如何不需要系统重启, 就能让改变语言生效?

(1) 网上提供的方式, 利用反射:

public static void setLanguage(Locale locale) {try {Object objIActMag;Class clzIActMag = Class.forName("android.app.IActivityManager");Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);config.locale = locale;Class clzConfig = Class.forName("android.content.res.Configuration");java.lang.reflect.Field userSetLocale = clzConfig.getField("userSetLocale");userSetLocale.set(config, true);Class[] clzParams = { Configuration.class };Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod("updateConfiguration", clzParams);mtdIActMag$updateConfiguration.invoke(objIActMag, config);BackupManager.dataChanged("com.android.providers.settings");} catch (Exception e) {e.printStackTrace();}}

需要添加权限: android.permission.CHANGE_CONFIGURATION
这种方式会重新进入onCreate方法.

(2) 系统源码提供的方式:

    public void updateLocale(Locale locale) {try {IActivityManager am = ActivityManagerNative.getDefault();Configuration config = am.getConfiguration();config.locale = locale;am.updateConfiguration(config);BackupManager.dataChanged("com.android.providers.settings");} catch (RemoteException e) {}}

这时系统会提示找不到IActivityManager与ActivityManagerNative, 我们需要引入layoutlib包, 如何导入?请参考上面如何使用SystemProperties中的介绍, 导入layoutlib包. 同样此方法同样需要权限:android.permission.CHANGE_CONFIGURATION
重新编译一下, 这时就可以正常使用.

使用方法将系统语言改为英文:
Locale locale = Locale.US;
setLanguage(locale);

或者:
Locale locale = Locale.US;
updateLocale(locale);

这两种方式都可以改变系统语言, 大家可以任选一种.

二. android studio 为应用添加系统权限(添加系统签名)

1.在AndroidManifest.xml中的manifest节点下添加:

android:sharedUserId="android.uid.system"

2.生成签名文件
点击build–>generate Signed APK进入下图:

这里写图片描述

点击 Create new..按钮进入:

这里写图片描述

填写完相应信息, 点击确定, 点击next会在你选择的路径下生成demo.jks文件.
在这里假设路径为 /home/downloads/share/

3.集成系统签名需要的文件
(1) 让Android Studio集成系统签名,需要用到一个工具keytool-importkeypair 下载地址
将压缩包下载下来, 解压到jks文件所在的路径 /home/downloads/share/下.
(2) platform.x509.pem、platform.pk8
这两个文件位于系统源码中, 路径为../build/target/product/security. 我是将系统源码下载下来得到.
将这两个文件同样copy到jks文件所在的路径下. 此时 keytool-importkeypair, platform.x509.pem, platform.pk8和demo.jks在同一目录下

4.生成系统签名文件
在终端进入上面文件所在的目录, 运行下面命令:

./keytool-importkeypair -k demo.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias demo

命令说明: ./keytool-importkeypair -k [jks文件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]

运行完这条命令, 我们就得到系统签名文件了. 注意: 在window系统中是不能使用上面的命令, 也就是说不能使用keytool-importkeypair工具, 你需要将上面的keytool-importkeypair, platform.x509.pem, platform.pk8和demo.jks文件copy到linux系统下运行上面命令生成系统签名文件再将签名文件copy出来.

5.配置gradle(app)
添加signingConfigs配置, 填写jks的路径,密码,别名

这里写图片描述

还需要说一点, 生成的系统签名文件最好放到app的根目录下, 我这里在根目录下新建文件夹Signature, 将系统签名文件放到此目录下.

6.如果想直接Run app就是release版且带系统签名的apk,还需修改:
(1) 将app的编译模式改为release
(2) 修改buildTypes:

buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'signingConfig signingConfigs.release}
}

至此给应用系统签名介绍完毕. 如有问题欢迎留言.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35673.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

goland 界面变成中文 修改回英文界面

新版本会自动装中文插件 主界面 文件->设置 打开 设置对话框 点击 插件 选择已安装 取消勾选 中文插件 确定 重新启动即可 恢复到原始的英文界面

Android多语言切换/适配——以英语为例

近期在做一个背单词APP来作为毕业设计,在app里面想设计一个切换语言为英语的功能,记录一下本次实现的效果以及步骤。 文章目录 实现效果中文模式英文模式 实现原理实现步骤1、创建相关的value文件夹和string.xml文件2、 在对应的string文件中选择合适的翻…

Android 10.0修改语言设置简体中文(中国)为简体中文(中国大陆)

Android Q中 Settings的语言设置选择列表中简体中文下,默认显示为中国、香港、台湾和新加坡: 如果想修改其显示为中国大陆,就必须修改ICU资源的配置。 ICU ICU 是开源项目, 提供了最新的unicode标准,字符集转换&…

设置日语输入法遇到的各种问题

一旦开始学习日语,就忍不住想在自己的电脑上输入日文,按照网上的各种说法,将win10自带的输入法添加了日语的语言包之后,还有各种小问题,于是又在网上各种搜索,花了不少时间。在此整理一下日语输入遇到的各种…

postman设置成中文

介绍: Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。用户在开发…

postman怎么设置中文

很多小伙伴想问postman怎么如何设置中文?,但问题这个小工具没有人开发,期待业内大神开发一个吧。下面给大家分享下postman设置中文遇到的问题,一起来学习下吧。 postman怎么设置中文 postman设置中文方法 1.进入postman官网,可以…

【Android进阶】17、设置中文:语言地区的本地化、国际化

文章目录 为了国际化的需求我们设置中文版和英文版两个版本的 res/values/strings.xml,通过设置地区,让os自动找对应版本。 在 res 下添加 strings.xml,设置 Locale 为中文,效果如下: 生成后的文件如下图: 其实文件放置在 res/values-zh/strings.xml 中,如下: 在 res/…

百模大战,谁是下一个ChatGPT?

“不敢下手,现在中国还没跑出来一家绝对有优势的大模型,上层应用没法投,担心押错宝。”投资人Jucy(化名)向光锥智能表示,AI项目看得多、投的少是这段时间的VC常态。 ChatGPT点燃AI大爆炸2个月中&#xff0…

什么软件可以文字转语音?这些软件值得收藏

我们的第一感觉是视觉,第二感觉是听觉,当我们不方面使用视觉来获取信息的时候,常常都会使用听觉来获取信息。比如在做家务的时候,我们就可以在旁边播放有声读物,这样子即可以做家务,又可以获取知识内容等。…

录音转文字app有哪些?可以试试这几款录音转文字助手

你知道怎么将手机上的录音文件转换成文字内容吗?生活中我们有时需要记录一些较长的活动内容,手头却没有纸笔,只能先利用手机的录音功能将其记录下来,之后再进行处理。那大家知道手机要怎么将录音文件转文字吗?还在一边…

哪些录音转文字免费软件好用?分享这三款好用的软件

(UC自媒体)录音转文字免费软件哪个好?这三款值得收藏 (CSDN)哪些录音转文字免费软件好用?分享这三款好用的软件 嘿,小伙伴们,如果你是一名正在学习外语的学生,那么一定会遇到听不懂英语音频里面陌生词汇的难题。常反…

录音转文字电脑软件有哪些?录音如何转文字?

现在越来越多的小伙伴步入职场工作,会有自己新的工作方式和规划。有的人为了能让自己尽快适应快节奏的工作状态,会苦思冥想的寻求应对方法。例如有的人会从会议纪要开始着手,即把会议上的音频内容转换为文字、文档输出。那么你们知道录音转文…

文字转语音软件哪个好?这些软件值得收藏

文字转语音免费版软件哪个好?相信有不少小伙伴都有考虑过这个问题,每当自己需要将文字转为语音的时候,就会很头疼,应该用哪款软件?现在市面上有很多种软件可以将文字转成语音,但它们不是有限制次数&#xf…

各大文字转语音软件对比,哪个比较好呢?

现在市场上的文字转语音软件非常多,所以很多人已经挑花了眼。为了帮大家省事,来给大家总结几个比较热门的文字转语音软件,大家可以对比着看看。 1、讯飞配音 使用方式:网页版和APP 声音数量:讯飞配音的声音…

录音转文字软件哪个好用?这些软件值得收藏

相信不少做自媒体的小伙伴,经常都会使用录音来把一些灵光一现的想法或者是遇到比较有趣的事情录制下来吧。这样我们就不会因为手动记录,而导致有时思绪的中断。可是在后期我们对录音文件进行整理的时候,遇到时长比较长的录音,如果…

录音如何转文字?这篇文章教你录音转换文字怎么操作

在当今数字化时代,我们越来越依赖语音录音来记录会议、演讲、采访等各种场合的内容。然而,对于那些需要对录音中的信息进行进一步编辑或搜索的人来说,手动听取并转录录音内容可能会是一项耗时且繁琐的任务。那有没有什么方法可以转换录音文字…

学会这三款软件,可以轻松完成录音转文字操作

在工作中,我们经常需要开会讨论。有时候需要记录的内容很多,手写的速度赶不上语速。那么我们会使用录音机将内容会议内容录制下来,后续再将其转写为文字。不过随着现在转写的工具越来越多,想要找到一款好用的软件也不是那么容易。…

音频转文字软件有哪些?推荐几个录音转文字工具

无论在工作还是学习上,一下子记不住太多信息,得依靠录音来记录,例如采访、课堂录音、做会议记录等等。那么大家是否有这个困扰?在后期整理十分麻烦,需要慢慢反复地去听,甚至出现嘈杂的声音而不能听清楚原声…

怎么把录音转文字?手把手教你转换

随着科技的不断进步,录音音频转文字已经成为人们日常生活中不可或缺的工具之一。无论是在上课、开会还是进行采访时,录音设备已经成为常用的辅助手段。然而,音频文件的格式往往会增加人们的阅读和分类负担,因此,将音频…

想知道如何把录音转变为文字?这三个录音转文字的方法和你分享

将录音转换为文字有许多实际应用场景,比如会议记录、学习和研究、采访记录、法律领域、医学领域、市场调研等等。总而言之,将录音转换为文字可以提供便利和效率,使得音频内容更易于阅读、搜索和编辑,并在需要时更方便地引用和分析…