2015-04-29 4 views
20

С приведенным ниже кодом мое уведомление добавляется только в панель уведомлений, сообщение о всплывающем всплывании не отображается, как если бы вы получили сообщение whatsapp, когда находитесь в другом приложении. Что делает это с уведомлением?андроидное шоу с всплывающим окном любого приложения

private void sendNotification(int distance, ViewObject viewObject) { 
    Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class); 
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    notificationIntent.putExtra("path", viewObject.getPath()); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(notificationIntent); 
    PendingIntent notificationPendingIntent = stackBuilder.getPendingIntent(Integer.parseInt(viewObject.getRefId()), PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle(); 
    bigText.bigText(String.format(getString(R.string.notification), viewObject.getTitle())); 
    bigText.setBigContentTitle(getString(R.string.hello)); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
    builder.setSmallIcon(R.drawable.ic_wald_poi) 
      .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_poi)) 
      .setColor(getResources().getColor(R.color.primary)) 
      .setContentTitle(getString(R.string.hello)) 
      .setContentIntent(notificationPendingIntent) 
      .setContentText(String.format(getString(R.string.notification), viewObject.getTitle())) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setStyle(bigText); 

    builder.setAutoCancel(true); 
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(0, builder.build()); 
} 

ответ

51

Если вы хотите использовать Heads-up Notifications как это:

enter image description here

На Android 7.1 (уровень API 25) и ниже: приоритет уведомления

  • Набор для Notification.PRIORITY_HIGH или Notification.PRIORITY_MAX.
  • мелодия и вибрация - вы можете использовать setDefaults(Notification.DEFAULT_ALL)

Android 8.0 (уровень API 26) и выше:

  • Установить уведомление приоритет NotificationManager.IMPORTANCE_HIGH

Код:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
      builder.setSmallIcon(R.drawable.ic_wald_poi) 
        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_poi)) 
        .setColor(getResources().getColor(R.color.primary)) 
        .setContentTitle(getString(R.string.hello)) 
        .setContentIntent(notificationPendingIntent) 
        .setContentText(String.format(getString(R.string.notification), viewObject.getTitle())) 
        .setDefaults(Notification.DEFAULT_ALL) 
        .setStyle(bigText) 
        .setPriority(NotificationManager.IMPORTANCE_HIGH) 

Примеры условий, которые могут вызвать уведомления Heads-Up включают в себя:

  • активности пользователя находится в полноэкранном режиме (приложение использует fullScreenIntent).
  • Уведомление имеет высокий приоритет и использует рингтоны или вибрации на устройствах под управлением Android 7.1 (уровень API 25) и ниже.
  • Канал уведомления имеет большое значение для устройств под управлением Android 8.0 (API уровня 26) и выше.

Приоритет:

PRIORITY_HIGH и PRIORITY_MAX осуждался в уровне API 26. Использование IMPORTANCE_HIGH вместо этого.

Here это подробнее :-)

+0

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

+0

try 'setAutoCancel (false);' – RediOne1

+1

Теперь 'Notification.PRIORITY_HIGH' и' Notification.PRIORITY_MAX' устарели. – pRaNaY

22

Вы должны установить приоритет уведомительного Notification.PRIORITY_HIGH или Notification.PRIORITY_MAX. Я должен был также сделать .setDefaults(Notification.DEFAULT_ALL).

1

Система Android решает, что уведомление отображается как Уведомление о Heads-Up.Есть несколько условий, которые могут запускающих Heads-Up уведомление:

Примеры условий, которые могут вызвать уведомления Heads-Up включают:

  • активности пользователя в полноэкранном режиме (Приложение использует fullScreenIntent).
  • Уведомление имеет высокий приоритет и использует рингтоны или вибрации на устройствах под управлением Android 7.1 (уровень API 25) и ниже.
  • Канал уведомления имеет большое значение для устройств под управлением Android 8.0 (API уровня 26) и выше.

Источник: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Так что, если вы используете Android 7.1 и ниже, не забудьте добавить мелодию или вибрации, а также высоким приоритетом. Для Android 8.0 и выше измените приоритет на с высоким значением.

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID) 
    // ... 
    .setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE) 
    .setPriority(NotificationCompat.PRIORITY_HIGH); // or HIGH_IMPORTANCE for Android 8.0 
Смежные вопросы