UIWebView: pausas de audio HTML5 en iOS 6 cuando la aplicación entra en segundo plano

Buen día,

Mi aplicación es una aplicación de reproducción de música. Controlo el -Tag con Javascript. Hasta el momento no funcionan los botones de problemas, reproducción, pausa, siguiente y anterior. Cuando me paro junto al dispositivo en iOS 5, la música sigue sonando, pero la próxima canción automática no funciona. Cuando no está en stand-by, funciona. Y en iOS 6, justo después de presionar el botón, la música se desvanece.

El botón Reproducir / Pausa en la pantalla de locking funciona en iOS 5, pero no en iOS 6.

A partir de iOS 6, DEBE establecer la categoría de la sesión de audio en ‘reproducción’ antes de crear UIWebView. Esto es todo lo que tienes que hacer. No es necesario activar la sesión.

Esto también debe usarse para videos html, porque si no configura la sesión, su video se silenciará cuando el interruptor de timbre esté apagado.

 #import  AVAudioSession *audioSession = [AVAudioSession sharedInstance]; BOOL ok; NSError *setCategoryError = nil; ok = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; if (!ok) { NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError); } 

Asegúrese de que su objective se vincule al marco de AVFoundation.


Si utiliza Cordova, el archivo que necesita modificar es platforms/ios/MyApp/Classes/AppDelegate.m , y terminará luciendo así:

 #import "AppDelegate.h" #import "MainViewController.h" #import  @implementation AppDelegate - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { AVAudioSession *audioSession = [AVAudioSession sharedInstance]; BOOL ok; NSError *setCategoryError = nil; ok = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; if (!ok) { NSLog(@"%s setCategoryError=%@", __PRETTY_FUNCTION__, setCategoryError); } self.viewController = [[MainViewController alloc] init]; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } @end 

Además, como se menciona en los comentarios, debe vincular el Marco de AVFoundation, como se explica en esta respuesta :

  • Abra su proyecto con xcode open ./platforms/ios/MyApp.xcworkspace/
  • Navegador de proyectos> orientar Mi aplicación> General
  • Desplácese hasta la parte inferior para encontrar marcos y bibliotecas vinculados

¡La respuesta de Chris Lundie de arriba es excelente! He puesto su bloque de código dentro de AppDelegate de mi proyecto y funcionó.

Una palabra de advertencia: 1) Asegúrese de agregar el marco AVFoundation a su proyecto

Este complemento hará que su aplicación ignore el interruptor de silencio. Básicamente es el mismo código que está en las otras respuestas, pero está muy bien envuelto en un complemento para que no tenga que hacer ninguna edición manual objetiva.

https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio

Ejecute este comando para agregarlo a su proyecto:

 cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-backgroundaudio.git 

Sintaxis Swift:

en AppDelegate:

 import AVFoundation func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { do{ let audio = AVAudioSession.sharedInstance() try audio.setCategory(AVAudioSessionCategoryPlayback) }catch let error as NSError{ print(error) } } 

Aquí, la versión 2.0 de SWIFT para establecer la categoría de la sesión de audio en “reproducción” antes de crear UIWebView.

 do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) } catch let error as NSError { print(error) } do { try AVAudioSession.sharedInstance().setActive(true) } catch let error as NSError { print(error) }