2つのサービスがあるアプリがあります。
1つは、WindowManager
を使用して他のアプリでフローティング(オーバーレイ)のUIを表示するためのものです。もう1つは、GooglePlayAPI
を使用した位置追跡用です。私のアプリは常にこれらのサービスを実行します。
これらのサービスがOSによって強制終了されないようにしたいと思います。だから私はService.startForeground()
を呼び出します。ただし、通知ドロワーには2つの通知があります。
両方のサービスに単一の通知を使用する方法はありますか?
はい、可能です。
Service.startForeground()署名を見ると、通知IDと通知自体の両方を受け入れます( ドキュメントを参照 )。したがって、複数のフォアグラウンドサービスに対して単一の通知のみを使用する場合、これらのサービスは同じ通知と通知IDを共有する必要があります。
シングルトンパターンを使用して、同じ通知と通知IDを取得できます。実装例は次のとおりです。
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;
}
}
したがって、このクラスをフォアグラウンドサービスで使用できます。たとえば、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;
}
}
これらのサービスを実行してみてください。出来上がり!複数のフォアグラウンドサービスに対して単一の通知があります;)!