Android: Как я могу разместить свое уведомление поверх области уведомлений?

Я пытаюсь разместить мое уведомление поверх области уведомлений.

Решение состоит в том, чтобы установить параметр "когда" на мой объект уведомления с будущим временем, например:

notification.when = System.currentTimeMills()*2; 

Код, который я использую в этом:

        long timeNotification = System.currentTimeMillis()*2;
        Notification notification = new Notification(statusIcon,c.getResources().getString(R.string.app_name),timeNotification);
        notification.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;
        notification.when = timeNotification;
        notification.priority = Notification.PRIORITY_MAX;

но некоторые приложения (например, Facebook) могут отправлять простые уведомления с их текущим временем по моему.

Если я обновляю свое уведомление, оно остается под этими.

Какие параметры я должен установить, чтобы разместить мой Notification в верхней части области уведомлений?

Ответы

Ответ 1

Вы должны это сделать. Другие ответы кажутся устаревшими.

NotificationCompat.Builder mBuilder =
            (NotificationCompat.Builder) new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.some_small_icon)
            .setContentTitle("Title")
            .setContentText("This is a test notification with MAX priority")
            .setPriority(Notification.PRIORITY_MAX);

setPriority (Notification.PRIORITY_MAX) важен. Его также можно заменить любым из следующих требований.

Различные уровни приоритетов Информация:

PRIORITY_MAX - Используйте для критических и срочных уведомлений, которые предупреждают пользователя о том, что это критически важно или необходимо решить, прежде чем они смогут продолжить выполнение определенной задачи.

PRIORITY_HIGH - Используйте прежде всего важные сообщения, такие как сообщения или чаты, с содержанием, которое особенно интересно для пользователя. Высокоприоритетные уведомления вызывают отображение уведомлений о хедз-ап.

PRIORITY_DEFAULT - Используйте для всех уведомлений, которые не попадают ни в один из других приоритетов, описанных здесь.

PRIORITY_LOW - Используйте для уведомлений о том, что вы хотите, чтобы пользователь был проинформирован, но это менее актуально. Низкоприоритетные уведомления, как правило, отображаются в нижней части списка, что делает их хорошим выбором для таких вещей, как публичные или неориентированные социальные обновления. Пользователь попросил сообщить о них, но эти уведомления никогда не должны иметь приоритет над срочными или прямая связь.

PRIORITY_MIN - Используйте для контекстной или справочной информации, такой как информация о погоде или информация о контекстном местоположении. Уведомления о минимальном приоритете не отображаются в строке состояния. Пользователь обнаруживает их при расширении оттенка уведомления.

Для получения дополнительной информации проверьте следующую ссылку: http://developer.android.com/design/patterns/notifications.html#correctly_set_and_manage_notification_priority

Ответ 2

Вы можете сделать свое уведомление Ongoing, когда оно появится выше обычного обычного уведомления. Но в этом случае пользователь не сможет очистить его вручную.

Чтобы сделать это, установите флаги для вашего объекта Notification:

notif.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR

Ответ 4

Обратите внимание, что если вы хотите получить уведомление "хедз-ап", ​​то есть отображающее верхнюю часть текущего окна пользователя, вы должны иметь следующий набор в своем построителе:

setDefaults(NotificationCompat.DEFAULT_VIBRATE)

Ссылка находится в javadoc:

Уведомление, которое вибрирует, скорее всего будет представлено в виде уведомления о хедз-ап на некоторых платформах.

Полный пример уведомления о хедз-ап:

NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.some_small_icon)
            .setContentTitle("Title")
            .setContentText("This is a test notification with MAX priority")
            .setPriority(Notification.PRIORITY_MAX)
            .setDefaults(NotificationCompat.DEFAULT_VIBRATE);