如何向 运行 服务发送多条消息?

How can I send multiple messages to a running service?

我创建了一个录音服务。我已经实现了所有方法,例如 startRecording()stopRecording()saveFile() 等...

我想在我从 Firebase 发送第一个通知时开始录制,并在第二次通知时停止录制并在录制停止时保存文件。这是我当前的解决方案,通过在 FirebaseNotificationService:

中启动和停止服务
public void onMessageReceived(RemoteMessage remoteMessage) {

    if (remoteMessage.getData().size() > 0) {
        String body = remoteMessage.getNotification().getBody();
        final String tag = remoteMessage.getNotification().getTag();

        if (tag.equals("startRecording")) {
            Intent intent = new Intent(this, RecorderService.class);
            startForegroundService(intent);
        }

        if (tag.equals("stopRecording")) {
            Intent intent = new Intent(this, RecorderService.class);
            stopService(intent);
        }
    }

}

我知道我可以在 RecorderService:

中像这样开始记录 onStartCommand
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    startRecording();
    // and show sticky notification
    return START_STICKY;
}

并停止录制

@Override
public void onDestroy() {
    stopRecording();
    saveFile();
}

但我还有另一个问题:如何向 运行 服务发送更多消息?例如,我如何处理此类服务中的暂停?或者如何在销毁服务之前调用 stopRecording()saveFile() 方法?简而言之,除了 startCommanddestroy?

之外,还有另一种远程处理服务的选项吗?

在这种特殊情况下,我想通过另一个通知调用 stopRecording(),并在第 3 个通知中调用 saveFile(),最后在第 4 个通知中停止服务。我不希望你编写方法来做到这一点。我只是在寻找一种与 运行 服务进行通信的方法。谢谢。

编辑: 我知道其他选项,如绑定和取消绑定事件,但我正在寻找一种通用的方式来与服务进行通信而不使用其准备好的事件。

您需要使用绑定 Service,而不是将操作发布为 Intent。它将为您提供 Service 活页夹实例,您可以将其用作服务的回调并发送数百个 events/messages。

勾选the documentation about it