2014-02-19 2 views
15

나는 AVAudioPlayer의 인스턴스를 사용하여 오디오 파일을 재생하고 있습니다. 앱이 백그라운드에서 오디오를 재생하도록 구성되어 있으며 적절한 오디오 세션이 설정되어 있습니다. 나는 또한 성공적으로 원격 제어 이벤트를 받고있다. 나는 오디오 때 뷰 부하를 재생하는 응용 프로그램을 실행하면왜 AVAudioPlayer를 일시 중지하면 화면 잠금 오디오 컨트롤이 사라 집니까?

#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 

:

여기에 코드입니다. 앱이 백그라운드 모드로 들어가면 오디오가 계속 재생됩니다. 컨트롤 센터 (앱 또는 잠금 화면에서 액세스)에서 오디오를 성공적으로 일시 중지하거나 재생할 수 있지만 잠금 화면 오디오 컨트롤에 액세스하고 플레이어를 일시 중지하면 음악이 일시 중지되고 화면 잠금이 제어됩니다. 사라지다. 나는 음악이 멈추기를 기대하지만 컨트롤이 사라지지는 않을 것이다.

내가 사용하는 다른 오디오 앱에서 잠금 화면의 오디오를 일시 중지 한 다음 재생할 수 있습니다. 나는 뭔가를 간과 했는가? 이런 식으로 올바른 접근 방식입니까?

답변

21

올바른 트랙에 있습니다 ...

설정이 누락 된 것 같습니다. 그것없이

MPNowPlayingInfoCenter nowPlayingInfo 

, 당신은 결과가 일시 정지를 누른 후, IE를 설명 얻을 것이다, 잠금 화면은 더 이상 일시 정지를 보여줍니다, 또는 실제로는 노래를 재생된다. 여기에 그것을 설정하는 방법에 대한 안내서가 있습니다. (나는이 코드를 작업 코드에서 가져 왔지만 시간이 오래 걸렸지 만 무엇이 무엇인지 알아낼 수있을 것입니다.)

MPMediaItemArtwork *artwork = [[MPMediaItemArtwork alloc]initWithImage:albumImage]; 
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = [NSDictionary dictionaryWithObjectsAndKeys:aSong.songTitle, MPMediaItemPropertyTitle, 
                  aSong.artistName, MPMediaItemPropertyArtist, artwork, MPMediaItemPropertyArtwork, 1.0f, MPNowPlayingInfoPropertyPlaybackRate, nil]; 
+0

감사합니다 mdb983 - 그 누락 된 조각 이었어! – maml

+0

반갑습니다. 다행히 도왔다! – MDB983

+0

총 생명의 은인! 나는 원래의 저자와 같은 문제가 있었고 이것은 나에게 트릭을 만들어 주었다. – Audioy

0

이 코드를 ViewDidLoad()에 추가하십시오. 그것은 나를 위해 일합니다. 그것을 시도해야한다

UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 

    let session:AVAudioSession = AVAudioSession.sharedInstance() 

    do 
    { 
     try session.setCategory(AVAudioSessionCategoryPlayback) 
    } 
    catch 
    { 
     print("Background Play Error") 
    } 
관련 문제