参考和引用:ytmfdw博文
简要分析
One step:点击系统Settings直接看logcat
I/ActivityManager( 458): Config changes=2004 {1.0 ?mcc?mnc ja_JP ldltr sw800dp w800dp h1207dp 160dpi xlrg port finger -keyb/v/h -nav/h s.9}
I/ContactsProvider( 680): Locale has changed from zh_TW to ja_JP
I/ContactsDatabaseHelper( 680): Switching to locale ja_JP (ICU v51.1.0.1)
I/ContactsDatabaseHelper( 680): Locale change completed in 490ms
I/ContactsDatabaseHelper( 680): Switching to locale ja_JP (ICU v51.1.0.1)
Two_step :Settings_apk
packages/apps/Settings/com/android/settings/LocalePicker.Java
发现其中onLocaleSelected(final Locale locale)方法,去调用了fromwork层下的/frameworks/base/core/Java/com/android/internal/app/LocalePicker下的updateLocale()方法
public static void updateLocale(Locale locale) {
try {
IActivityManager am = ActivityManagerNative.getDefault();
Configuration config = am.getConfiguration();
config.setLocale(locale);
am.updateConfiguration(config);
BackupManager.dataChanged("com.android.providers.settings");
} catch (RemoteException e) {
}
}
实现步骤
One_step:添加一个公共方法
/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
public void updateLanguage(Configuration values) {
if (mHeadless)
return;
int changes = 0;
boolean kept = true;

本文详细介绍了如何通过aidl在Android系统层面实现语言切换。首先分析了Settings应用中的onLocaleSelected方法,然后逐步讲解了添加公共方法、修改ActivityManagerService、声明常量、实现aidl接口以及调用接口的步骤。最后提到可以直接调用updateLocale方法,但可能需要系统签名和权限控制。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



