使用startForeground()调用的多个Foreground Services的单一通知

时间:2016-06-17 11:28:08

标签: android android-service android-notifications

我有一个有两项服务的应用程序。

一个是使用WindowManager在其他应用上显示浮动(叠加)的UI。另一种是使用GooglePlayAPI进行位置跟踪。我的应用程序总是运行这些服务。

我希望这些服务不被操作系统杀死。所以我打电话给Service.startForeground()。但是,通知抽屉中有两个通知。

有没有办法为这两种服务使用单一通知?

1 个答案:

答案 0 :(得分:20)

是的,有可能。

如果我们看看Service.startForeground()签名,它接受通知ID和&通知本身(see documentation)。因此,如果我们想要只有一个前台服务的单一通知,这些服务必须共享相同的通知&通知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&amp; 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;
    }
}

尝试运行这些服务。瞧!您有多个前台服务的单一通知;)!