1.接收到短信亮屏
- 源码位置 :/vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/MessagingNotification.java
private static void updateNotification(
...
wakeUpScreen(context);
}
private static void wakeUpScreen(Context context) {
...
}
2.收到任何消息都亮屏
- 源码位置:vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java
private PowerManager.WakeLock wakeLock;
private void wakeUpScreen() {
if (wakeLock== null){
wakeLock= mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, TAG);
wakeLock.setReferenceCounted(false);
}
if (!mPowerManager.isScreenOn()) {
wakeLock.acquire(3000);
Log.d(TAG, "notification turn screen on");
}
}
}
在addNotificationViews和updateNotificationInternal里面添加如下亮屏请求,当来了一条新通知或者更新一条通知的时候都会走到这两个逻辑
protected void addNotificationViews(NotificationData.Entry entry){
if (entry == null) {
return;
}
mNotificationData.add(entry);
tagForeground(entry.notification);
updateNotifications();
+ wakeUpScreen();
}
private void updateNotificationInternal(StatusBarNotification notification,
NotificationListenerService.RankingMap ranking) throws InflationException {
...
updateHeadsUp(key, entry, shouldPeek, alertAgain);
updateNotifications();
+ wakeUpScreen();
}
8.0添加通知亮屏
- vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
protected void addNotificationViews(Entry entry) {
if (entry == null) {
return;
}
mNotificationData.add(entry);
wakeUpScreen();
updateNotifications();
}
...
public void updateNotification(StatusBarNotification notification, RankingMap ranking) throws InflationException {
...
updateHeadsUp(key, entry, shouldPeek, alertAgain);
wakeUpScreen();
updateNotifications();
}
10/23更新,解决下载时,手机屏幕频繁唤醒
private void wakeUpScreen(StatusBarNotification notification) {
if (notification.getPackageName().equals("com.android.providers.downloads")){
return ;
}
...
}
protected void addNotificationViews(Entry entry) {
...
wakeUpScreen(entry.notification);
}
public void updateNotification(StatusBarNotification notification, RankingMap ranking) throws InflationException {
...
wakeUpScreen(notification);
}