2015-04-29 11 views
20

Dzięki poniższemu kodowi moje powiadomienie jest dodawane tylko do paska powiadomień, nie pojawia się komunikat o wyskakującym stylu, tak jak gdybyś otrzymał wiadomość WhatsApp, gdy jesteś w innej aplikacji. Co sprawia, że ​​dzieje się to z powiadomieniem?powiadomienie o programie Android z wyskakującym okienkiem na dowolnej aplikacji

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()); 
} 

Odpowiedz

51

Jeśli chcesz użyć Heads-up Notifications tak:

enter image description here

W Androidzie 7.1 (poziom API 25) i dolna:

  • Ustaw priorytet powiadomień do Notification.PRIORITY_HIGH lub Notification.PRIORITY_MAX.
  • Ustaw dzwonek i wibracje - można użyć setDefaults(Notification.DEFAULT_ALL)

Android 8.0 (poziom API 26) i wyższa:

  • Ustaw powiadomienie priorytet NotificationManager.IMPORTANCE_HIGH

Kod:

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) 

Przykłady warunków, które mogą wywołać informację heads-up to:

  • aktywności użytkownika jest w trybie pełnego (app wykorzystuje fullScreenIntent).
  • Powiadomienie ma wysoki priorytet i używa dzwonków lub wibracji na urządzeniach z systemem Android 7.1 (poziom API 25) i niższych.
  • Kanał powiadomień ma duże znaczenie dla urządzeń z systemem Android 8.0 (poziom interfejsu API 26) i nowszym.

Pierwszeństwo:

PRIORITY_HIGH i PRIORITY_MAX została zaniechana poziomu API 26. Zastosowanie IMPORTANCE_HIGH zamian.

Here więcej informacji :-)

+0

Jeśli chcę, aby moja aktywność dotykała takich wydarzeń, jakie są, a nie odrzucać tego powiadomienia, ponieważ jest to możliwe? –

+0

spróbuj 'setAutoCancel (false);' – RediOne1

+1

Teraz 'Notification.PRIORITY_HIGH' oraz' Notification.PRIORITY_MAX' są nieaktualne. – pRaNaY

22

Musisz ustawić priorytet powiadamiania Notification.PRIORITY_HIGH lub Notification.PRIORITY_MAX. Musiałem również zrobić .setDefaults(Notification.DEFAULT_ALL).

1

System Android decyduje, czy powiadomienie jest wyświetlane jako Powiadomienie o heads-up.Istnieje kilka warunków, które może wywołują heads-up zawiadomienie:

Przykłady stanów, które mogą wyzwalać powiadomienia heads-up obejmują:

  • aktywność użytkownika jest w trybie pełnoekranowym (zastosowań aplikacji fullScreenIntent).
  • Powiadomienie ma wysoki priorytet i wykorzystuje dzwonki lub wibracje na urządzeniach z Androidem 7.1 (poziom API 25) i niższych.
  • Kanał powiadomień ma duże znaczenie na urządzeniach z Androidem 8.0 (poziom interfejsu API 26) i nowszych.

Źródło: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Więc jeśli jesteś z systemem Android 7.1 i niższe, należy dodać dzwonek lub wibrację jak również wysokim priorytecie. W przypadku Androida 8.0 i nowszych zmień priorytet na o wysokim znaczeniu.

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 
Powiązane problemy