[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
kann an jedem Punkt in Ihrer Anwendung verwendet werden, z. B. direkt vor dem Starten der Audiowiedergabe oder beim Start in application:didFinishLaunchingWithOptions:
Delegate-Methode.
Für Anwendungen, die die Steuerelemente für Hintergrund-Audiowiedergabe über den gesamten Anwendungslebenszyklus (und im Hintergrund) verwenden möchten, würde ich empfehlen, beginReceivingRemoteControlEvents
in Ihrem AppDelegate aufzurufen. Auf diese Weise können Sie jederzeit während des Anwendungslebenszyklus Remoteüberwachungsereignisse empfangen.
Palpatim erwähnt MPRemoteCommandCenter
. Als jemand, der eine komplette Anwendung rund um die Hintergrund-Audiowiedergabe (think radio) aufgebaut hat, würde ich diese Methode gegenüber den alten UIEvent
Callbacks wärmstens empfehlen. Ich tauche in diesem Ansatz in another answer, aber das Wesentliche ist MPRemoteCommandCenter.sharedCommandCenter()
verwenden, um Steuerelemente für die Wiedergabe auf dem Sperrbildschirm und Leitzentrale, sowie bieten Selektoren zu aktivieren oder deaktivieren:
let commandCenter = MPRemoteCommandCenter.sharedCommandCenter()
commandCenter.previousTrackCommand.enabled = true;
commandCenter.previousTrackCommand.addTarget(self, action: #selector(previousTrack))
commandCenter.nextTrackCommand.enabled = false
commandCenter.nextTrackCommand.addTarget(self, action: #selector(nextTrack))
Beachten Sie, wenn Sie explizit wollen Kontrollen deaktivieren , müssen Sie zusätzlich zur Einstellung enabled = false
für den Befehl einen [Dummy] -Wähler für die Aktion bereitstellen.
Um Ihre Punkt über becomeFirstResponder
Adresse:
Jedes Objekt, das von UIResponder, wie ein UIViewController
oder UIApplicationDelegate
kann sich die First Responder, so lange erbt wie das Objekt die gewünschte Methode implementiert remoteControlReceivedWithEvent:
die Fernbedienung zu handhaben Veranstaltungen. Zum Beispiel könnte ich das AppDelegate zum ersten Responder machen und alle Fernsteuerungsereignisse dort verarbeiten und Benachrichtigungen senden, die eine UIViewController
hören, um den Player anzuhalten oder zum nächsten Track zu springen. Sie könnten eine UIViewController
werden die erste Antwort (der Controller mit einem Verweis auf den Spieler) und steuern Sie den Player direkt. Die Architektur ist ziemlich offen und es hängt wirklich davon ab, wie Sie Ihre Anwendung strukturiert haben. Sie haben keinen Code angegeben, daher weiß ich nicht, wie Ihr Player-Setup aussieht.
Ihre UIResponder
Handling Code wird wahrscheinlich so etwas wie folgt aussehen:
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
if (event.type == UIEventTypeRemoteControl) {
switch (event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
// Pause or play action
break;
case UIEventSubtypeRemoteControlNextTrack:
// Next track action
break;
case UIEventSubtypeRemoteControlPreviousTrack:
// Previous track action
break;
case UIEventSubtypeRemoteControlStop:
// Stop action
break;
default:
// catch all action
break;
}
}
}
Auch hier, ob Sie diese in einem Controller platzieren oder in Ihrem AppDelegate bis zu Ihnen ist.
Kann ich es in einer Klasse verwenden, die keine Unterklasse von UIViewController oder AppDelegate ist?
Ja, Sie implementieren dies in jeder Klasse, die von UIResponder
erbt. Menschen verwenden normalerweise den AppDelegate oder einen View-Controller zur Vereinfachung.
Haben Sie einen Beispielcode mit MPRemoteCommandCenter? Danke –
@JaredChu Sorry, ich habe keine direkte Erfahrung damit. – Palpatim