英文切换为中文后,设置--提示音和通知--勿扰--自动规则,该菜单内的菜单名依然显示为英文,没有切换为中文。

    xiaoxiao2021-11-04  38

    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

    
    转载请注明原文地址: https://ju.6miu.com/read-677989.html

    最新回复(0)