2016-06-17 29 views
6

Ho un'app con due servizi.Notifica singola per più servizi in primo piano utilizzando la chiamata startForeground()

Uno serve per mostrare l'interfaccia utente per il floating (overlay) su altre app utilizzando WindowManager. L'altro è per il rilevamento della posizione utilizzando GooglePlayAPI. La mia app esegue sempre questi servizi.

Desidero che questi servizi non vengano uccisi dal sistema operativo. Quindi chiamo Service.startForeground(). Tuttavia ci sono due notifiche nel cassetto delle notifiche.

Esiste un modo per utilizzare un'unica notifica per entrambi i servizi?

+0

Due notifiche in Android significa? –

+0

@Pramod quando si utilizza il metodo startForeground in Servizio, il sistema Android imposta la notifica relativa al servizio in esecuzione ora. io uso due servizi. e utilizzare il metodo startForeground in entrambe le classi. –

+0

Un'opzione è consolidare i 2 servizi in un singolo servizio. So che questo non risponde alla domanda. Ma potrebbe essere un'opzione per te dato che entrambi i servizi iniziano e finiscono insieme. – Madushan

risposta

10

Sì, è possibile.

Se diamo un'occhiata alla firma Service.startForeground(), accetta entrambi l'ID di notifica & la notifica stessa (see documentation). Quindi, se vogliamo avere un'unica notifica per più di un primo piano, questi servizi devono condividere lo stesso ID di notifica &.

Possiamo usare il modello singleton per ottenere la stessa notifica ID di notifica &. Ecco l'esempio di implementazione:

NotificationCreator.java

public class NotificationCreator { 

    private static final int NOTIFICATION_ID = 1094; 

    private static Notification notification; 

    public static Notification getNotification(Context context) { 

     if(notification == null) { 

      notification = new NotificationCompat.Builder(context) 
        .setContentTitle("Try Foreground Service") 
        .setContentText("Yuhu..., I'm trying foreground service") 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .build(); 
     } 

     return notification; 
    } 

    public static int getNotificationId() { 
     return NOTIFICATION_ID; 
    } 
} 

Quindi, siamo in grado di utilizzare questa classe nei nostri servizi in primo piano. Per esempio abbiamo MyFirstService.java & MySecondService.java:

MyFirstService.java

public class MyFirstService extends Service { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startForeground(NotificationCreator.getNotificationId(), 
       NotificationCreator.getNotification(this)); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

MySecondService.java

public class MySecondService extends Service { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     startForeground(NotificationCreator.getNotificationId(), 
       NotificationCreator.getNotification(this)); 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

Basta provare a eseguire questi servizi. Ecco! Hai una notifica singola per più servizi in primo piano;)!

+0

Se si utilizza RemoteViews per definire il layout delle notifiche, si avrà ancora il problema ... –