2009-12-13 11 views
9

Sono in grado di rilevare che l'iPhone è andato in stop e è tornato dalla modalità sleep, utilizzando applicationWillResignActive e applicationDidBecomeActive. Ma come faccio a scoprire che tipo di interruzione era. Sto facendo un'applicazione per audio player, e ho bisogno di tenere l'audio in riproduzione quando l'iPhone va a dormire (che so come fare). Ma ho bisogno di interrompere l'audio quando si verifica un messaggio, allarme o interruzione della batteria scarica. Inoltre ho bisogno di riprendere l'audio quando l'evento è finito.Rilevamento del tipo di interrupt iPhone

Quindi, come faccio a distinguere tra questi diversi interrupt.

risposta

5

Queste informazioni probabilmente non sono disponibili per la tua app, ma ecco alcune cose da provare.

  1. In applicationWillResignActive:, controllare oggetto del NSNotification e le proprietà userinfo per vedere se ci sono eventuali suggerimenti lì.

  2. Registrati per ricevere tutte le notifiche inviati al centro di notifica di default:

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

tuo metodo verrà chiamato quando nulla è distaccato. Registra l'oggetto di notifica e il dizionario di UserInfo e forse vedrai che viene pubblicata una notifica utile. Se ne trovi uno, puoi registrarti solo per quello.

  1. Questa è la più hacky, ma si potrebbe essere in grado di ottenere l'accesso al avviso che viene visualizzato se si tratta di un messaggio di avviso o la batteria. Gli avvisi vengono visualizzati in una UIWindow sulla UIWindow principale della tua app. È possibile registrarsi per UIWindowDidBecomeVisibleNotification, quindi guardare le sottoview della finestra per vedere se è possibile trovare un avviso o qualche altro indizio utile.

Tutti i metodi di cui sopra si baserebbero sul comportamento non documentato per funzionare e potrebbero essere rifiutati dall'App Store. Nessuno di questi comporta chiamate di metodi private, sebbene si possa sostenere che l'osservazione di un nome di notifica non documentato conta come API privata. Alla fine, l'opinione di Apple è l'unica che avrà importanza.

Personalmente, proverei, assicurandomi che il codice non funzioni correttamente se e quando il sistema cambia.

+1

Provato A e B, ma è venuto tutto vuoto. Nessuna descrizione o coppia chiave-valore nel userinfo. Niente in oggetto neanche. È strano come Apple abbia mancato di inserire funzionalità così semplici. Non ho provato C, dato che sembra troppo hacky, anche per me. – Prashant

+1

Si potrebbe voler riconsiderare C: se si presume semplicemente che * qualsiasi * avviso visualizzato sulla tua app sia motivo di mettere in pausa la musica, non si farà nulla di non documentato. Sta solo curiosando attorno alla gerarchia delle viste per leggere il testo di avviso che sarebbe hacky. – benzado

Problemi correlati