如何将多个消息发送到正在运行的服务?

时间:2019-11-11 16:00:04

标签: android background-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 中像这样开始在StartCommand上录制:

@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()方法?简而言之,还有一种替代方法来处理服务,而不是 startCommand destroy

在这种特殊情况下,我想通过另一个通知来调用stopRecording(),并通过第三个通知来调用saveFile(),最后通过第四个通知来停止服务。我不希望您编写执行此操作的方法。我只是在寻找一种与正在运行的服务进行通信的方法。谢谢。

编辑:我知道其他选项,例如绑定和取消绑定事件,但我正在寻找一种不使用其准备好的事件来累计服务的通用方法。

1 个答案:

答案 0 :(得分:0)

您需要使用绑定的Intent来代替将动作发布为Service。它将为您提供Service活页夹的实例,您可以将其用作服务的回调并发送数百个事件/消息。

选中the documentation about it