Cómo iniciar la grabación de audio cuando la aplicación se ejecuta en segundo plano?
Estoy trabajando en la grabación de audio. Cuando la aplicación se ejecuta en primer plano, tengo que comenzar la grabación de audio y al ir al segundo plano, en ese momento la grabación de audio funciona bien.
Pero mi pregunta es cómo comenzar la grabación de audio cuando ya estoy en el segundo plano. Mi función de grabación de audio se activa de esta manera:
Tengo un dispositivo Bluetooth LE con botones y una aplicación iOS. Ambos están emparejados (dispositivo Bluetooth LE y el iPhone en el que se ejecuta la aplicación iOS) y la aplicación iOS está escuchando eventos en el dispositivo Bluetooth LE, como cuando se presiona un botón.
Ahora, cuando el usuario presiona un botón en el dispositivo Bluetooth LE, la aplicación iOS captura el evento y puedo ejecutar código incluso si la aplicación está en segundo plano, pero no puedo iniciar una grabación de voz.
Ya he habilitado los Modos en segundo plano:
Aquí está mi código para la grabación de audio:
func startRecording() {
DispatchQueue.global(qos: .background).asyncAfter(deadline: DispatchTime.now(), qos: .background) {
let audioFilename = self.getDocumentsDirectory().appendingPathComponent("recording.m4a")
print("grabar 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)
}
}
}
No puedo encontrar una solución adecuada para hacer eso, por favor sugiérame la manera adecuada de hacerlo, gracias de antemano.
davy.ai
Solución para grabación de audio cuando la aplicación está en segundo plano
Si desea iniciar la grabación de audio cuando su aplicación ya está en segundo plano, debe utilizar el método
beginBackgroundTask(expirationHandler:)
proporcionado por la claseUIApplication
. Este método le permite solicitar al sistema más tiempo para completar una tarea específica antes de que la aplicación se suspenda.Así es como puede modificar su función
startRecording
para grabar audio incluso cuando la aplicación está en segundo plano:En la función modificada, hemos agregado los siguientes pasos:
.playAndRecord
, lo cual permite que la aplicación grabe audio mientras está en segundo plano.beginBackgroundTask(expirationHandler:)
y la hemos nombrado “Audio Recording”.Cuando la aplicación está en segundo plano y el usuario presiona un botón en el dispositivo Bluetooth LE, su aplicación recibirá el evento y se llamará al método
startRecording()
. En este punto, la aplicación solicitará tiempo adicional para completar la grabación de audio antes de que sea suspendida por el sistema.Una vez que la grabación esté completa, no olvide finalizar la tarea en segundo plano llamando al método
endBackgroundTask(_:)
.