关于android语言切换后通知栏显示的问题

  • Post author:
  • Post category:其他



改变


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)


也许可以做点什么…






不知道大家有没有看图上的豌豆夹,它在语言切换后显示还是没有更新


….