Ich kann erkennen, dass das iPhone eingeschlafen war und aus dem Schlaf zurückkam, indem ich die applicationWillResignAktiv und applicationDidBecomeActive nutze. Aber wie finde ich heraus, welche Art von Interrupt es war? Ich mache eine Audio-Player-Anwendung, und muss das Audio spielen, wenn das iPhone schlafen geht (was ich weiß). Aber ich muss den Ton unterbrechen, wenn eine Nachricht, ein Alarm oder eine Batterieunterbrechung auftritt. Außerdem muss ich das Audio wieder aufnehmen, wenn das Ereignis vorbei ist.
Wie kann ich diese verschiedenen Interrupts unterscheiden?
Diese Informationen stehen Ihrer App wahrscheinlich nicht zur Verfügung, aber hier sind einige Dinge, die Sie ausprobieren sollten.
Überprüfen Sie in applicationWillResignActive:
die Objekte NSNotification und userInfo, um festzustellen, ob dort Hinweise vorhanden sind.
Registrieren Sie sich, um alle Benachrichtigungen zu erhalten, die an das Standard-Benachrichtigungscenter gesendet wurden:
%Vor%Ihre Methode wird aufgerufen, wenn etwas gepostet wird. Protokollieren Sie das Benachrichtigungsobjekt und das userInfo-Wörterbuch. Möglicherweise wird eine nützliche Benachrichtigung angezeigt. Wenn Sie einen finden, können Sie sich nur dafür registrieren.
Alle oben genannten Methoden basieren auf undokumentiertem Verhalten und könnten möglicherweise Ihre Einreichung aus dem App Store ablehnen. Keiner von ihnen beinhaltet private Methodenaufrufe, obwohl Sie argumentieren könnten, dass die Beobachtung eines nicht dokumentierten Benachrichtigungsnamens als private API gilt. Am Ende ist nur die Meinung von Apple wichtig.
Ich persönlich würde es versuchen und sicherstellen, dass der Code bei einem Systemwechsel fehlerfrei ausfällt.
Tags und Links objective-c iphone interrupt-handling