2016-06-17 16 views
6

İki servise sahip bir uygulamanız var.startForeground() çağrısı kullanarak birden fazla Foreground Services için Tek Bildirim

Bir kullanıcı, WindowManager'u kullanarak diğer uygulamalarda yüzen (kaplama) için UI'yi göstermek içindir. Diğeri ise GooglePlayAPI kullanarak Konum Takibi içindir. Uygulamam her zaman bu hizmetleri çalıştırıyor.

Bu hizmetlerin işletim sistemi tarafından öldürülmesini istemiyorum. Bu yüzden Service.startForeground()'u arıyorum. Ancak bildirim çekmecesinde iki bildirim vardır.

Her iki hizmet için de tek bir bildirim kullanmanın bir yolu var mı?

+0

Android'de iki bildirim ne demektir? –

+0

@Pramod Service'de startForeground yöntemini kullanırken, android sistemi şu anda çalışan Servis hakkında bildirim ayarlar. iki servis kullanıyorum. ve her iki sınıfta startForeground yöntemini kullanın. –

+0

Bir seçenek, 2 hizmeti tek bir servise birleştirmektir. Bunun, soruyu yanıtlamadığını biliyorum. Ancak, her iki hizmetin de birlikte başlamasına ve durdurulmasına verilen bir seçenek olabilir. – Madushan

cevap

10

Evet, bu mümkün.

Service.startForeground() imzasına bir göz attığımızda, bildirimin her iki bildirimini de & bildirimini (see documentation) kabul eder. Bu nedenle, birden fazla ön plan hizmetleri için yalnızca tek bir bildirime sahip olmak istiyorsak, bu hizmetlerin aynı bildirimi & bildirim kimliğini paylaşması gerekir.

Aynı bildirimi almak için singleton şablonunu kullanabiliriz & Bildirim kimliği. Bizim ön plan hizmetlerde bu sınıfını kullanabilirsiniz,

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

Böylece

NotificationCreator.java: İşte örnek uygulamasıdır.

MyFirstService.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; 
    } 
} 

Sadece bu hizmetleri çalıştırmayı

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: Mesela biz MyFirstService.java & MySecondService.java var. İşte bu kadar! Birden çok ön plan hizmetleri için tek bir bildiriminiz var;)!

+0

Bildirim düzenini tanımlamak için RemoteViews kullanıyorsanız, yine de sorun olur ... –

İlgili konular