1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > android 系统语言改变广播 关于android语言切换后通知栏显示的问题

android 系统语言改变广播 关于android语言切换后通知栏显示的问题

时间:2018-11-25 08:35:34

相关推荐

android 系统语言改变广播 关于android语言切换后通知栏显示的问题

之前在移动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_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)也许可以做点什么…

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。