改变
android
语言设置,但是状态栏的快捷功能显示文字不会立即发生改变。
同样,下拉通知栏的文字显示在切换语言后也不会同步更新。
于是在项目中引入:
@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
代码
updateConfigurationLocke
d
函数中,
自己写接收代码如下:
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
下的
NotificationManagerServi
ce
看看里面的
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()
和
private void updateAdbNotification(boolean adbEnabled)
也许可以做点什么…
不知道大家有没有看图上的豌豆夹,它在语言切换后显示还是没有更新
….