gpt4 book ai didi

android - 使用 startForeground() 调用的多个前台服务的单个通知

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:36 73 4
gpt4 key购买 nike

我有一个包含两项服务的应用。

一个是使用 WindowManager 显示在其他应用程序上 float (覆盖)的 UI。另一个是使用 GooglePlayAPI 进行位置跟踪。我的应用始终运行这些服务。

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

有没有办法对两种服务使用同一个通知?

最佳答案

是的,这是可能的。

如果我们看一下 Service.startForeground() 签名,它接受通知 ID 和通知本身 ( see documentation )。因此,如果我们想为多个前台服务提供一个通知,这些服务必须共享相同的通知和通知 ID。

我们可以使用单例模式来获得相同的通知和通知 id。下面是示例实现:

NotificationCreator.java

public class NotificationCreator {

private static final int NOTIFICATION_ID = 1094;
private static final String CHANNEL_ID = "Foreground Service Channel";
private static Notification notification;

public static Notification getNotification(Context context) {

if(notification == null) {

notification = new NotificationCompat.Builder(context, CHANNEL_ID)
.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;
}
}

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

关于android - 使用 startForeground() 调用的多个前台服务的单个通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37880432/

73 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com