学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
今天我们学习打卡的内容是:Android 10.0 屏蔽掉 SystemUI 的通知提示音
那直接进入分享:
在10.0SystemUI 中有一些高级别的通知在发出的时候会首选悬浮在状态栏(手机的状态栏在手机屏幕最上方,显示的就是手机现在的状态,比如:网络状况、现在时间、剩余电量等等的一栏)在其上面停留几秒钟后消失并且还会有通知提示音,今天的学习内容就是根据需求要求去掉悬浮通知同时也去掉通知提示音(大概就像现在手机功能中的免打扰功能吧)
这就要分析通知提示音是怎么发出来的
首先我们需要知道在SystemUI启动的时候会Start()一个媒体播放的类RingtonePlayer。
通知是通过RingtonePlayer 来播放通知声音 而 NotificationManagerService.java 中 负责管理通知声音的播放
frameworks\base\services\core\java\com\android\server\notification\NotificationManagerService.java
相关修改代码:
private boolean playSound(final NotificationRecord record, Uri soundUri) { boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0; // play notifications if there is no user of exclusive audio focus // and the stream volume is not 0 (non-zero volume implies not silenced by SILENT or // VIBRATE ringer mode) if (!mAudioManager.isAudioFocusExclusive() && (mAudioManager.getStreamVolume( AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) { final long identity = Binder.clearCallingIdentity(); /*try { final IRingtonePlayer player = mAudioManager.getRingtonePlayer(); if (player != null) { if (DBG) Slog.v(TAG, "Playing sound " + soundUri + " with attributes " + record.getAudioAttributes()); player.playAsync(soundUri, record.sbn.getUser(), looping, record.getAudioAttributes()); return true; } } catch (RemoteException e) { } finally { Binder.restoreCallingIdentity(identity); }*/ } return false; }