2015-04-29 11 views
20

Con il codice seguente la mia notifica viene aggiunta solo alla barra di notifica, non viene visualizzato alcun messaggio in stile popup come se si riceverebbe un messaggio WhatsApp quando si è in un'altra applicazione. Cosa rende questo evento una notifica?notifica show Android con un popup sopra qualsiasi applicazione

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

risposta

51

Se si desidera utilizzare Heads-up Notifications come questo:

enter image description here

Su Android 7.1 (livello di API 25) e inferiore: priorità

  • Set notifica al Notification.PRIORITY_HIGH o Notification.PRIORITY_MAX.
  • impostare suonerie e vibrazioni - è possibile utilizzare setDefaults(Notification.DEFAULT_ALL)

Android 8.0 (livello di API 26) e superiore:

  • Set notifica priorità alla NotificationManager.IMPORTANCE_HIGH

Codice:

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) 

Esempi di condizioni che possono scatenare le notifiche heads-up includono:

  • L'attività dell'utente è in modalità a schermo intero (l'applicazione utilizza fullScreenIntent).
  • La notifica ha una priorità elevata e utilizza suonerie o vibrazioni su dispositivi con Android 7.1 (livello API 25) e versioni precedenti.
  • Il canale di notifica ha un'importanza elevata sui dispositivi con Android 8.0 (livello API 26) e versioni successive.

Priorità:

PRIORITY_HIGH e PRIORITY_MAX è stata sconsigliata a livello di API 26. uso IMPORTANCE_HIGH invece.

Here è più informazioni :-)

+0

se voglio che la mia attività tocchi eventi così com'è e non respinga questa notifica di quanto sia possibile? –

+0

try 'setAutoCancel (false);' – RediOne1

+1

Ora 'Notification.PRIORITY_HIGH' e' Notification.PRIORITY_MAX' sono deprecati. – pRaNaY

22

È necessario impostare la priorità di notifica per Notification.PRIORITY_HIGH o Notification.PRIORITY_MAX. Dovevo anche fare .setDefaults(Notification.DEFAULT_ALL).

1

Il sistema Android sta decidendo quando viene visualizzata una notifica come Notifica di preavviso.Ci sono diverse condizioni che può innescare un heads-up di notifica:

Esempi di condizioni che possono scatenare le notifiche heads-up includono:

  • L'attività dell'utente è in modalità a schermo intero (gli usi app fullScreenIntent).
  • La notifica ha una priorità elevata e utilizza suonerie o vibrazioni su dispositivi con Android 7.1 (livello API 25) e versioni precedenti.
  • Il canale di notifica ha una grande importanza sui dispositivi con sistema operativo Android 8.0 (livello API 26) e versioni successive.

Fonte: https://developer.android.com/guide/topics/ui/notifiers/notifications.html#Heads-up

Quindi, se si sta eseguendo Android 7.1 e inferiori, assicurarsi di aggiungere una suoneria o vibrazione così come l'alta priorità. Per Android 8.0 e versioni successive, modificare la priorità in alta importanza.

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 
Problemi correlati