你可以用以下方式实现:
notificationBuilder.setFullScreenIntent(pendingIntent, true)
你还需要使用这些:
val tempChannel = NotificationChannel(tempChannelId, "temp channel",
NotificationManager.IMPORTANCE_HIGH)
tempChannel.enableVibration(true)
...
notificationBuilder.setAutoCancel(false)
notificationBuilder.setPriority(NotificationCompat.PRIORITY_MAX)
notificationBuilder.setVibrate(LongArray(0))
notificationBuilder.setFullScreenIntent(pendingIntent, true)
重要提示:
在大多数设备上,这将在屏幕顶部显示通知,覆盖所有内容并保持在那里。
但是,在某些设备上,这将立即启动给定给通知的挂起意图。(例如华为)
为了解决这个问题,我们可以为fullScreenIntent使用一个虚拟的pendingIntent,以相同的方式显示通知,只是没有notificationBuilder.setFullScreenIntent(pendingIntent, true);
。这将作为后备方案,因此通知将出现,但在大约5秒钟后会缩小到状态栏。
val servicePendingIntent = PendingIntent.getService(context, 0, Intent(context, FullScreenIntentService::class.java), 0)
val mainActivityPendingIntent = PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), PendingIntent.FLAG_ONE_SHOT)
...
notificationBuilder.setContentIntent(mainActivityPendingIntent)
notificationBuilder.setFullScreenIntent(servicePendingIntent, true)
在哪里:
class FullScreenIntentService : Service() {
override fun onCreate() {
super.onCreate()
showNotificationHereTheSameWayJustWithoutSetFullScreenIntent()
stopSelf()
}
override fun onBind(intent: Intent?): IBinder? = null
}
别忘了在 AndroidManifest 中注册服务。