提醒式通知也稱為橫幅通知或懸浮通知,適用于用戶應(yīng)該立即知曉的通知,它會(huì)短暫地懸浮在Window上疯坤,等到顯示時(shí)間耗盡或者用戶上劃后消失,隨后仍顯示在通知抽屜中深浮。
提醒式通知的應(yīng)用非常廣泛压怠,QQ/微信的消息通知,支付寶的交易記錄都會(huì)以提醒式通知的形式出現(xiàn)略号。不過(guò)Android的官方文檔上并沒(méi)有明確表示該如何觸發(fā)提醒式通知刑峡,而是給出了以下模糊的描述。
以下情況可能會(huì)觸發(fā)提醒式通知:
1 用戶的 Activity 處于全屏模式(應(yīng)用使用 fullScreenIntent)玄柠。
2 通知的優(yōu)先級(jí)很高突梦,且在搭載 Android 7.1(API 級(jí)別 25)及更低版本的設(shè)備上使用鈴聲或振動(dòng)。
3 在搭載 Android 8.0(API 級(jí)別 26)及更高版本的設(shè)備上羽利,通知渠道的重要程度比較高宫患。
也就是說(shuō),開(kāi)發(fā)者沒(méi)辦法調(diào)用特定的方法顯示提醒式通知这弧,而是系統(tǒng)根據(jù)通知的重要性去判斷是否作為提醒式通知展示娃闲。而國(guó)內(nèi)的APP大多沒(méi)什么節(jié)操虚汛,大多喜歡直接使用最高優(yōu)先級(jí),這種粗暴的方式會(huì)極大地傷害用戶體驗(yàn)皇帮,因此系統(tǒng)一般默認(rèn)關(guān)閉提醒式通知卷哩。而像微信等APP,手機(jī)廠商默認(rèn)是允許提醒式通知的属拾,這是國(guó)民級(jí)APP的特權(quán)将谊。
下面以MIUI12系統(tǒng)為例,看一下如何才能展示提醒式通知渐白。首先打開(kāi)“懸浮通知”設(shè)置尊浓,該選項(xiàng)位于應(yīng)用的“通知管理”界面洽议。在該界面還能看到“通知類(lèi)別”選項(xiàng)瘤睹,該選項(xiàng)中的每一個(gè)類(lèi)別對(duì)應(yīng)一個(gè)NotificationChannel
扇单,而只有某個(gè)通知渠道的重要程度為“緊急”時(shí)才會(huì)顯示提醒式通知竹伸。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (mNotificationChannel == null) {
mNotificationChannel = new NotificationChannel(
DOWNLOAD_CHANNEL_ID, DOWNLOAD_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
mNotificationChannel.setShowBadge(true);
mNotificationChannel.setLightColor(Color.BLUE);
mNotificationChannel.enableVibration(false);
notificationManager.createNotificationChannel(mNotificationChannel);
}
mNotification = new NotificationCompat.Builder(context, DOWNLOAD_CHANNEL_ID)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setDefaults(Notification.DEFAULT_ALL)
.setOngoing(true)
.setAutoCancel(true)
.setContentTitle(title)
.setContentText(content)
.build();
}
可以發(fā)現(xiàn)NotificationChannel
的重要性被設(shè)置為了NotificationManager.IMPORTANCE_HIGH
,其對(duì)應(yīng)“通知管理”中的“緊急”饲做,但如果用戶手動(dòng)調(diào)整該通知的重要性逼纸,那也無(wú)法顯示提醒式通知嗅蔬。由于提醒式通知的限制較多歌亲,如果有類(lèi)似需求谷丸,可以考慮通過(guò)WindowManager
實(shí)現(xiàn)。