我有一个有两项服务的应用程序。
一个是使用WindowManager
在其他应用上显示浮动(叠加)的UI。另一种是使用GooglePlayAPI
进行位置跟踪。我的应用程序总是运行这些服务。
我希望这些服务不被操作系统杀死。所以我打电话给Service.startForeground()
。但是,通知抽屉中有两个通知。
有没有办法为这两种服务使用单一通知?
答案 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;
}
}
尝试运行这些服务。瞧!您有多个前台服务的单一通知;)!