rule1.name = mContext.getResources() .getString(R.string.zen_mode_default_weeknights_name);
rule2.name = mContext.getResources().getString(R.string.zen_mode_default_weekends_name);
rule.name = mContext.getResources().getString(R.string.zen_mode_default_events_name);
这三个字符串是通过ZenModeHelper.java中的appendDefaultScheduleRules()和appendDefaultEventRules()这两个方法获取的,这两个方法是在ZenModeHelper构造函数里调用的,而ZenModeHelper对象是在NotificationManagerService.java中初始化的,NotificationManagerService只在开机的时候启动一次,按照流程来说,想要这三个字符串的翻译生效,就必须重启手机。
最近就这个问题研究了一下,发现我们可以通过新建一个接收广播来监听系统语言的变化,进而改变字符串的显示,方法如下:
1.在ZenModeHelper构造函数里添加
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
mContext.registerReceiver(mReceiver, filter);
2.新建一个接收广播
final ZenRule rule1 = new ZenRule();
final ZenRule rule2 = new ZenRule();
final ZenRule rule = new ZenRule();
private BroadcastReceiver mReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) {
rule1.name = mContext.getResources()
.getString(R.string.zen_mode_default_weeknights_name);
rule2.name = mContext.getResources()
.getString(R.string.zen_mode_default_weekends_name);
rule.name = mContext.getResources().getString(R.string.zen_mode_default_events_name);
}
}
};
修改的路径为:frameworks\base\services\core\java\com\android\server\notification\ZenModeHelper.java
frameworks\base\services\core\java\com\android\server\notification\NotificationManagerService.java