分享

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

 JUST SO LAZY 2012-07-04
关于android语言切换后通知栏显示的问题
2012-05-16 14:43

之前在移动UIUE项目中发现一个问题:

改变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代码updateConfigurationLocked函数中,

      自己写接收代码如下:

  1. 接收处理代码:

privateBroadcastReceiver mReceiver = new BroadcastReceiver(){

       @Override

      publicvoid 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 =newIntentFilter();

       filter.addAction(Intent.ACTION_LOCALE_CHANGED);

       

       mContext.registerReceiver(mReceiver, filter);

 

 

如果要结合notification,那么还要加上关于NotificationManager的监听和判断这里我就不具体展开关于快捷方式和快捷方式对应的下拉状态栏彼此在语言切换后同步更新的代码,逻辑主要是把上面的广播ACTION_LOCALE_CHANGEDNotificationManager等知识点相结合。

  

 

不知道大家有没有发现:android2.22.3中改变android语言设置,状态栏的文字还是不会立即发生改变(例如notification中的提醒),重启后能同步更新。

 

上面的图是我已经修改了android的源码后的图示,

其实在实际情况android2.22.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)也许可以做点什么…

 

 

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多