如何在后台应用运行时开始录音?
How to start audio recording when app running on background?
我正在从事录音工作。当应用程序 运行 在前台运行时,我必须开始录音并转到后台,那时录音工作正常。
但我的问题是当我已经在后台时如何开始录音,我的录音功能是这样启动的:
我有一个带按钮的低功耗蓝牙设备和一个 iOS 应用程序。这两个是配对的(蓝牙 LE 设备和 iPhone,其中 运行 是 iOS 应用程序)并且 iOS 应用程序正在侦听蓝牙 LE 设备上的事件,例如事件按下按钮。
现在,当用户点击 Bluetooth LE 设备上的按钮时,iOS 应用程序会捕获该事件,即使应用程序处于后台,我也能够 运行 编码,但我我无法开始录音。
我已经启用了 Background Modes
:
这是我的录音代码:
func startRecording() {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now(), qos: .background) {
let audioFilename = self.getDocumentsDirectory().appendingPathComponent("recording.m4a")
print("record Audio \(audioFilename)")
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
do {
self.audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
self.audioRecorder.delegate = self
self.audioRecorder.record()
} catch {
self.finishRecording(success: false)
}
}
}
我找不到合适的解决方案来做那件事,请给我建议正确的方法,在此先感谢。
出于安全原因,如果没有明确的 UI 交互,这是不可能的,否则就有可能“监视”某人(一旦配对,房间外的人就可以开始录音并听听房间内发生的事情)。
解决方法可以是:
- 发送本地通知,例如“设备已准备好录制,要开始吗?”。点击此按钮后,应用程序会在前台打开,并且应该能够开始录制。
- 使用 CallKit(适用于 phone 类用例)。当用户在 CallKit 系统中按下“接受”时 UI,即使在后台也可以开始录制音频。
这是我的解决方案:
从您的应用程序触发 CallKit 呼叫并控制您的耳机接听电话。
使用耳机通过蓝牙通道录制和传输语音数据。
我正在从事录音工作。当应用程序 运行 在前台运行时,我必须开始录音并转到后台,那时录音工作正常。
但我的问题是当我已经在后台时如何开始录音,我的录音功能是这样启动的:
我有一个带按钮的低功耗蓝牙设备和一个 iOS 应用程序。这两个是配对的(蓝牙 LE 设备和 iPhone,其中 运行 是 iOS 应用程序)并且 iOS 应用程序正在侦听蓝牙 LE 设备上的事件,例如事件按下按钮。
现在,当用户点击 Bluetooth LE 设备上的按钮时,iOS 应用程序会捕获该事件,即使应用程序处于后台,我也能够 运行 编码,但我我无法开始录音。
我已经启用了 Background Modes
:
这是我的录音代码:
func startRecording() {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now(), qos: .background) {
let audioFilename = self.getDocumentsDirectory().appendingPathComponent("recording.m4a")
print("record Audio \(audioFilename)")
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
do {
self.audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
self.audioRecorder.delegate = self
self.audioRecorder.record()
} catch {
self.finishRecording(success: false)
}
}
}
我找不到合适的解决方案来做那件事,请给我建议正确的方法,在此先感谢。
出于安全原因,如果没有明确的 UI 交互,这是不可能的,否则就有可能“监视”某人(一旦配对,房间外的人就可以开始录音并听听房间内发生的事情)。
解决方法可以是:
- 发送本地通知,例如“设备已准备好录制,要开始吗?”。点击此按钮后,应用程序会在前台打开,并且应该能够开始录制。
- 使用 CallKit(适用于 phone 类用例)。当用户在 CallKit 系统中按下“接受”时 UI,即使在后台也可以开始录制音频。
这是我的解决方案:
从您的应用程序触发 CallKit 呼叫并控制您的耳机接听电话。
使用耳机通过蓝牙通道录制和传输语音数据。