tutorial objective notification introduccion español clave autenticación apns iphone objective-c ios

iphone - notification - ¿Hay alguna notificación para detectar AirPlay en Objective-C?



xcode manual pdf (5)

6 años después. Creo que Sankar Siva no pidió detección , sino que activó una ruta de reproducción aérea.

Subí a @Alf porque me colocó en la dirección correcta, pero no responde a la pregunta.

MPVolumeViewWirelessRoutesAvailableDidChangeNotification cuando MPVolumeView detecta una nueva ruta.

Por otro lado, MPVolumeViewWirelessRouteActiveDidChangeNotification cuando se toma una nueva ruta, por ejemplo: cuando selecciona su Apple TV, por ejemplo.

No hay necesidad de API privada.

Estoy usando MPVolumeView para mostrar el ícono de Airplay y funciona bien.

Pero necesito mostrar una animación cuando llegue la red de Airplay, y ocultar esa animación cuando la red de Airplay se oculta.

¿Hay alguna notificación que me permita saber cuándo comienza y termina Airplay?


Esto es exactamente lo que está buscando: https://github.com/StevePotter/AirPlayDetector

Es una clase única que proporciona una propiedad para determinar si los dispositivos de airplay están activos. Y una notificación cuando cambia la disponibilidad.

Usarlo es simple. Al igual que, para determinar la disponibilidad se escribe:

[AirPlayDetector defaultDetector].isAirPlayAvailable

¡Disfrutar!


Hay un MPVolumeViewWirelessRoutesAvailableDidChangeNotification desde iOS 7 en el que puede registrarse.


Se puede hacer mucho más fácil con ReactiveCocoa . Echale un vistazo:

MPVolumeView *myVolumeView = [[MPVolumeView alloc] initWithFrame:CGRectMake(0, 0, 180, 22)]; for (UIView *view in myVolumeView.subviews) { if ([view isKindOfClass:[UIButton class]]) { [[RACAbleWithStart(view, alpha) distinctUntilChanged] subscribeNext:^(id x) { NSLog(@"airplay button visibility changed %@", x); }]; [[RACAbleWithStart(view, frame) distinctUntilChanged] subscribeNext:^(id x) { NSLog(@"airplay button connection changed %@", x); }]; } }


Para ser precisos: para verificar con exactitud la reproducción de airplay con API pública: NO

Todo lo que puedes hacer con la API pública es verificar las rutas inalámbricas disponibles , que incluyen airplay en ellas: (En el caso simple cuando tienes una instancia de MPVolumeView conectada en algún lugar de tu vista, puedes llamar a volumeView.areWirelessRoutesAvailable; )

Si tiene curiosidad sobre cómo verificar si airplay está disponible exactamente con API privada :

- (BOOL)isAirplayAvailable { Class MPAVRoutingController = NSClassFromString(@"MPAVRoutingController"); id routingController = [[MPAVRoutingController alloc] init]; NSArray* availableRoutes = [routingController performSelector:@selector(availableRoutes)]; for (id route in availableRoutes) { NSDictionary* routeDescription = [route performSelector:@selector(avRouteDescription)]; if ([routeDescription[@"AVAudioRouteName"] isEqualToString:@"AirTunes"]) return true; } return false; }

(Y, de hecho, MPVolumeView tiene una instancia de MPAVRoutingController como su ivar, por lo que la -areWirelessRoutesAvailable es solo un acceso para [volumeView->_routingController wirelessDisplayRoutesAvailable] )

Además, AVAudioSession expone currentRoute a usted, por lo que puede verificar si airplay está activo fácilmente con:

- (BOOL)isAudioSessionUsingAirplayOutputRoute { AVAudioSession* audioSession = [AVAudioSession sharedInstance]; AVAudioSessionRouteDescription* currentRoute = audioSession.currentRoute; for (AVAudioSessionPortDescription* outputPort in currentRoute.outputs){ if ([outputPort.portType isEqualToString:AVAudioSessionPortAirPlay]) return true; } return false; }

(La respuesta sobre AirPlayDetector no garantiza que Airplay esté disponible, todo lo que hace es verificar el valor alfa del botón de selección de ruta de MPVolumeView, que se mostrará en cualquier caso cuando haya rutas inalámbricas disponibles, por ejemplo, bluetooth. Hará exactamente lo mismo como volumeView.areWirelessRoutesAvailable; )