同样,下拉通知栏的文字显示在切换语言后也不会同步更新。
于是在项目中引入:
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
解决此问题的关键是在合适的时候和位置添加处理系统在切换语言后发出的广播信息。
比如你有一个IntentFilter,那么你要把ACTION_LOCALE_CHANGED添加到里面。
你要注册一个专门来接收处理系统在切换语言后发出的信息的广播。
例如:
locale信息改变之后,会发广播消息Intent.ACTION_LOCALE_CHANGED,
具体实现在activitymanagerservice.java代码updateConfigurationLocked函数中,
自己写接收代码如下:
1. 接收处理代码:
private BroadcastReceiver mReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "mReceiver onReceive intent.getAction(): "+intent.getAction());
if(intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) {
…//此处做你的处理
}
}
};
2.动态注册:
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
mContext.registerReceiver(mReceiver, filter);
如果要结合notification,那么还要加上关于NotificationManager的监听和判断这里我就不具体展开关于快捷方式和快捷方式对应的下拉状态栏彼此在语言切换后同步更新的代码,逻辑主要是把上面的广播、ACTION_LOCALE_CHANGED和NotificationManager等知识点相结合。
不知道大家有没有发现:android2.2、2.3中改变android语言设置,状态栏的文字还是不会立即发生改变(例如notification中的提醒),重启后能同步更新。
上面的图是我已经修改了android的源码后的图示,
其实在实际情况android2.2、2.3中中,当你切换语言后有3处地方它们的语言显示是不会更新的,可以测试下。
最下面标注一二三的三张截图
这三处我已经分别在不同的对应代码点上做了处理,所以语言切换后能同步更新显示。
时间有限具体代码就不详细贴出来说明了,分别提示几处关键的代码点位,大家好去深入。
图一:framework/base/packages/SystemUI/com.android.systemui.statusbar 下的CarrierLabel
看看它里面的private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver()也许可以做点什么…
图二:framework/base/packages/SystemUI/com.android.systemui.statusbar 下的StatusBarService
看看它里面的private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver()也许可以做点什么…
图三:framework/base/services/ com.android.server下的NotificationManagerService看看里面的
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()和private void updateAdbNotification(boolean adbEnabled) 也许可以做点什么…
不知道大家有没有看图上的豌豆夹,它在语言切换后显示还是没有更新....