xcode 如何开始录音时,应用程序在后台运行?

wribegjk  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(205)

我正在工作的音频录音。当应用程序运行在前台,我必须开始录音,并在那个时候去后台录音工作正常。
但我的问题是,如何开始录音时,我已经在后台,我的录音功能像这样发射:
我有一个带按钮的蓝牙LE设备和一个iOS应用程序。这两个设备是配对的(蓝牙LE设备和运行iOS应用程序的iPhone),iOS应用程序正在监听蓝牙LE设备上的事件,比如点击按钮。
现在,当用户点击蓝牙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)
            }
        }
    }

我找不到合适的方法来做那件事,请给我建议合适的方法,先谢了。

new9mtju

new9mtju1#

出于安全原因,如果没有明确的UI交互,这是不可能的,否则可能会“监视”一个人(一旦配对,房间外的人可以开始记录并收听房间内发生的事情)。
解决方法可能是:

  • 发送本地通知Eidogg.“设备已准备好录制,想要开始吗?"。一旦点击此按钮,应用程序将在前台打开,并且应该能够开始录制。
  • 使用CallKit(适用于类似电话的用例)。当用户在CallKit系统UI中按下“接受”时,即使在后台也可以开始录制音频。
izj3ouym

izj3ouym2#

以下是我的解决方案:
1.从您的应用触发CallKit呼叫,并控制您的耳机接听呼叫。
1.使用您的耳机录制和传输语音数据与蓝牙通道。

相关问题