2009-12-13 16 views
9

Puedo detectar que el iPhone se fue a dormir y volvió de reposo, usando la aplicaciónWillResignActive y applicationDidBecomeActive. Pero ¿cómo puedo averiguar qué tipo de interrupción fue? Estoy haciendo una aplicación de reproductor de audio y necesito mantener el audio cuando el iPhone se va a dormir (lo que sé hacer). Pero necesito interrumpir el audio cuando ocurre un mensaje, alarma o interrupción de batería baja. También necesito reanudar el audio cuando termine el evento.Detectando el tipo de interrupción de iPhone

Entonces, ¿cómo puedo diferenciar entre estas diferentes interrupciones?

Respuesta

5

Esa información probablemente no esté disponible para su aplicación, pero hay algunas cosas que debe probar.

  1. En applicationWillResignActive:, marque el objeto de la NSNotification y las propiedades de información del usuario para ver si hay alguna pista allí.

  2. Regístrate para recibir las notificaciones todos publicados en el centro de notificación por defecto:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil]; 
    

Su método será llamado cuando algo se publica. Registre el objeto de notificación y el diccionario userInfo y tal vez verá que se publica una notificación útil. Si encuentra uno, puede registrarse solo por eso.

  1. Este es el más hacky, pero es posible que pueda obtener acceso a la alerta que se muestra si se trata de un mensaje o una advertencia de batería. Las alertas se muestran en una ventana de UI sobre la ventana de UI principal de su aplicación. Puede registrarse para UIWindowDidBecomeVisibleNotification, luego mire las subvistas de la ventana para ver si puede encontrar una alerta u otra pista útil.

Todos los métodos anteriores se basarían en el comportamiento indocumentado para funcionar, y posiblemente podría obtener su presentación rechazada desde el App Store. Ninguno de ellos implica llamadas a métodos privados, aunque podría argumentar que la observación de un nombre de notificación no documentado cuenta como API privada. Al final, la opinión de Apple es la única que importará.

Personalmente, lo probaría, asegurándome de que el código falla con elegancia siempre y cuando el sistema cambie.

+1

Intenté A y B, pero salió todo vacío. Sin descripción o pares clave-valor en la información del usuario. Nada en el objeto tampoco. Es extraño cómo se perdió la manzana para poner en una funcionalidad tan simple. No intenté con C, ya que me parece demasiado hacky, incluso para mí. – Prashant

+1

Es posible que desee reconsiderar C: si simplemente supone que * cualquier * alerta que se muestra en su aplicación es motivo para pausar la música, no hará nada no documentado. Solo está hurgando en la jerarquía de vistas para leer el texto de alerta que sería raro. – benzado

Cuestiones relacionadas