Objective c 在后台播放一系列音频文件

Objective c 在后台播放一系列音频文件,objective-c,ios,background,avfoundation,avaudioplayer,Objective C,Ios,Background,Avfoundation,Avaudioplayer,在我的应用程序中,我有一个AVAudioPlayer的实例,它播放一系列mp3,通过initWithData切换到下一个: 我想让用户继续收听播放器,即使他关闭屏幕或进入后台。我知道,我可以使用remotecontrolevents在用户点击时切换到其他音频,但我可以让它自动切换,就像在iPod播放器中一样吗?您需要使用AvaudioPlayerLegate协议。首先,将其包括在界面中: @interface MyAppViewController : UIViewController <

在我的应用程序中,我有一个AVAudioPlayer的实例,它播放一系列mp3,通过
initWithData
切换到下一个:


我想让用户继续收听播放器,即使他关闭屏幕或进入后台。我知道,我可以使用
remotecontrolevents
在用户点击时切换到其他音频,但我可以让它自动切换,就像在iPod播放器中一样吗?

您需要使用
AvaudioPlayerLegate
协议。首先,将其包括在界面中:

@interface MyAppViewController : UIViewController <AVAudioPlayerDelegate> {
    AVAudioPlayer   *yourPlayer;
}

@property (nonatomic, retain) AVAudioPlayer *yourPlayer;
不要忘了在
viewDidLoad
方法中将
玩家的
委托
设置为
self
(或您决定放置它的位置):

您还需要将info.plist中的所需背景模式更改为应用程序播放音频

不要忘记注销远程控制事件(
viewDidUnload
):


您需要使用
AVAudioPlayerDelegate
协议。首先,将其包括在界面中:

@interface MyAppViewController : UIViewController <AVAudioPlayerDelegate> {
    AVAudioPlayer   *yourPlayer;
}

@property (nonatomic, retain) AVAudioPlayer *yourPlayer;
不要忘了在
viewDidLoad
方法中将
玩家的
委托
设置为
self
(或您决定放置它的位置):

您还需要将info.plist中的所需背景模式更改为应用程序播放音频

不要忘记注销远程控制事件(
viewDidUnload
):


你是说当前曲目完成后?是的,我将音频文件的URL存储在core data Objects中。你是说当前曲目完成后?是的,我将音频文件的URL存储在core data Objects中。你确定,如果我在后台,并且我可以在那里访问managedobjects,则将调用DidFinishPlay?如果您在.plist文件中设置了上述模式,并且还将调用beginReceivingRemoteControlEvents,则将在后台调用AudioPlayerDidFinishPlay
(注意,有些人可能会将音频会话初始化和远程控制事件放在
视图显示中
).有一个包含更多信息的线程。在模拟器vut上效果很好,所以在真实的设备上根本不起作用。你不知道为什么会这样吗?在设备上测试时有什么问题吗?它只是停止播放,无论我是进入主屏幕还是关闭屏幕。也许我必须在某些plist中添加更多内容?你确定吗,这是错误的如果我在后台,并且我可以在那里访问managedobjects,则将调用nishPlaying?如果您在.plist文件中设置了上述模式,则将在后台调用
AudioPlayerDifinishPlaying
,并调用
beginReceivingRemoteControlEvents
(注意,有些人可能会将音频会话初始化和远程控制事件放在
视图显示中
).有一个包含更多信息的线程。在模拟器vut上效果很好,所以在真实的设备上根本不起作用。你不知道为什么会这样吗?在设备上测试时有什么问题吗?它只是停止播放,无论我进入主屏幕还是关闭屏幕。也许我必须在一些plist中添加更多内容?
- (void)viewDidLoad {
    [super viewDidLoad]

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive: YES error: nil];

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(beginReceivingRemoteControlEvents)]){
        [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
        [self becomeFirstResponder];
    }

    self.yourPlayer = [[AVAudioPlayer alloc] init];
    self.yourPlayer.delegate = self;
}
[[UIApplication sharedApplication] endReceivingRemoteControlEvents]