4

我正在使用此代码来创建 Heads Up 通知。

private static void showNotificationNew(final Context context,final String title,final String message,final Intent intent, final int notificationId, final boolean isHeaderNotification) {
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context.getApplicationContext())
            .setSmallIcon(R.drawable.prime_builder_icon)
            .setPriority(Notification.PRIORITY_DEFAULT)
            .setCategory(Notification.CATEGORY_MESSAGE)
            .setContentTitle(title)
            .setContentText(message)
            .setWhen(0)
            .setTicker(context.getString(R.string.app_name));

    PendingIntent fullScreenPendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    notificationBuilder.setContentText(message);
    if(isHeaderNotification) {
        notificationBuilder.setFullScreenIntent(fullScreenPendingIntent, false);
    }

    notificationBuilder.setContentIntent(fullScreenPendingIntent);
    notificationBuilder.setAutoCancel(true);


    Notification notification = notificationBuilder.build();
    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(notificationId, notification);
}

问题是,通知应该占据顶部屏幕的很大一部分以引起用户注意,但几秒钟后它应该消失并且应该出现正常的通知。

但是这段代码并没有这样做。通知一直占据所有顶部屏幕,直到用户将其关闭。

我正在考虑在几秒钟后使用 Handler 创建另一个具有相同 ID 的普通通知,但我想知道是否有更好的方法来做到这一点。

按照 WhatsApp 的示例,模拟我想要的行为。

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

8

问题是因为您使用setFullScreenIntent引起的:

意图启动而不是将通知发布到状态栏。仅用于需要用户立即注意的极高优先级通知,例如用户已明确设置为特定时间的来电或闹钟。如果此功能用于其他用途,请为用户提供关闭它并使用正常通知的选项,因为这可能会造成极大的破坏。

同样如this answer中所述,您应该使用setVibrate来进行单挑工作。

这是一个工作单挑通知的例子:

private static void showNotificationNew(final Context context, final String title, final String message, final Intent intent, final int notificationId) {
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context.getApplicationContext())
            .setSmallIcon(R.drawable.small_icon)
            .setPriority(Notification.PRIORITY_HIGH)
            .setContentTitle(title)
            .setContentText(message)
            .setVibrate(new long[0])
            .setContentIntent(pendingIntent)
            .setAutoCancel(true);

    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(notificationId, notificationBuilder.build());
}
于 2016-03-22T23:18:34.897 回答