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を使用するために発生します。

通知をステータス バーに投稿する代わりに起動するインテント。ユーザーが特定の時間に明示的に設定した電話の着信や目覚まし時計など、ユーザーの即時の注意を必要とする非常に優先度の高い通知でのみ使用します。この機能を他の目的で使用する場合は、非常に混乱を招く可能性があるため、この機能をオフにして通常の通知を使用するオプションをユーザーに提供してください。

また、この回答で説明されているように、 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 に答える