aidl实现Android系统语言切换

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

参考和引用: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_stepSettings_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;
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值