UIWebView: pausas de audio HTML5 en iOS 6 cuando la aplicación entra en segundo plano
ios6 avfoundation (5)
Buen día,
Mi aplicación es una aplicación de reproducción de música. Controlo el <audio>
-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 bloqueo funciona en iOS 5, pero no en iOS 6.
¡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
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 <AVFoundation/AVFoundation.h>
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 objetivo 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 <AVFoundation/AVFoundation.h>
@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
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)
}
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)
}
}