Ich verwende eine Instanz von AVAudioPlayer, um eine Audiodatei abzuspielen. Die App ist so konfiguriert, dass Audio im Hintergrund abgespielt wird und eine geeignete Audiositzung eingerichtet wird. Ich erhalte auch erfolgreich Fernbedienungsereignisse.Warum verschwinden die Audioeinstellungen für den Sperrbildschirm, wenn ich AVAudioPlayer pausiere?
Hier ist der Code:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController()
@property (nonatomic) AVAudioPlayer *player;
@end
@implementation ViewController
@synthesize player;
- (BOOL)canBecomeFirstResponder { return YES; }
- (void)viewDidLoad
{
[super viewDidLoad];
// Turn on remote control event delivery
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
// Set ourselves as the first responder
[self becomeFirstResponder];
// Set the audio session
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
NSError *activationError = nil;
success = [audioSession setActive:YES error:&activationError];
// Play an mp3 with AVAudioPlayer
NSString *audioFileName = @"%@/Via_Aurora.mp3";
NSURL *audioURL = [NSURL fileURLWithPath:[NSString stringWithFormat:audioFileName, [[NSBundle mainBundle] resourcePath]]];
player = [[AVPlayer alloc] initWithURL:audioURL];
[player play];
}
- (void)viewWillDisappear:(BOOL)animated {
// Turn off remote control event delivery & Resign as first responder
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
// Don't forget to call super
[super viewWillDisappear:animated];
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"prev");
break;
case UIEventSubtypeRemoteControlNextTrack:
NSLog(@"next");
break;
case UIEventSubtypeRemoteControlPlay:
[player play];
break;
case UIEventSubtypeRemoteControlPause:
[player pause];
break;
default:
break;
}
}
}
@end
Wenn ich die App des Audio spielt, wenn die Ansicht Lasten laufen. Die App spielt weiterhin Audio ab, wenn sie in den Hintergrundmodus wechselt. Ich bin in der Lage, Audio aus dem Control Center anzuhalten und/oder wiederzugeben (Zugriff entweder über die App oder über den Sperrbildschirm), aber wenn ich auf die Audiosteuerung des Sperrbildschirms zugreife und den Player pausiere, wird die Musik angehalten und der Sperrbildschirm gesteuert verschwinden. Ich erwarte, dass die Musik pausiert, aber nicht, dass die Steuerelemente verschwinden.
In anderen Audio-Anwendungen, die ich verwende, können Sie anhalten, dann spielen, Audio aus dem Sperrbildschirm. Habe ich etwas übersehen? Ist das ein richtiger Ansatz, um so etwas zu tun?
Danke @ mdb983 - das war das fehlende Stück! – maml
Gern geschehen. Froh, dass es geholfen hat! – MDB983
Total Lebensretter! Ich hatte das gleiche Problem wie der ursprüngliche Autor und das machte den Trick für mich :) – Audioy