我已经创建了录音服务。我已经实现了所有方法,例如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()
,最后通过第四个通知来停止服务。我不希望您编写执行此操作的方法。我只是在寻找一种与正在运行的服务进行通信的方法。谢谢。
编辑:我知道其他选项,例如绑定和取消绑定事件,但我正在寻找一种不使用其准备好的事件来累计服务的通用方法。
答案 0 :(得分:0)
您需要使用绑定的Intent
来代替将动作发布为Service
。它将为您提供Service
活页夹的实例,您可以将其用作服务的回调并发送数百个事件/消息。