Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在设备锁定时从iPod库播放AVAudio_Iphone_Objective C_Ios_Avaudioplayer_Avplayer - Fatal编程技术网

Iphone 在设备锁定时从iPod库播放AVAudio

Iphone 在设备锁定时从iPod库播放AVAudio,iphone,objective-c,ios,avaudioplayer,avplayer,Iphone,Objective C,Ios,Avaudioplayer,Avplayer,只是一个简单的问题 我已经设置了我的程序,可以在后台播放AVAudioPlayer和AVPlayer,运行正常。我可以播放歌曲,锁定屏幕,声音将继续播放 我遇到的问题是,当我的屏幕已经锁定时,调用[AVPlayer play]。这最终导致无法播放任何音乐。您需要告诉播放机收听控制事件: - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[UIApplication sharedAppl

只是一个简单的问题

我已经设置了我的程序,可以在后台播放
AVAudioPlayer
AVPlayer
,运行正常。我可以播放歌曲,锁定屏幕,声音将继续播放


我遇到的问题是,当我的屏幕已经锁定时,调用
[AVPlayer play]
。这最终导致无法播放任何音乐。

您需要告诉播放机收听控制事件:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder {
    return YES;
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] endReceivingRemoteControlEvents];
    [self resignFirstResponder];
}
然后你可以像这样对他们采取行动:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    if (event.type == UIEventTypeRemoteControl) 
        {
        if (event.subtype == UIEventSubtypeRemoteControlPlay) 
            {
            [AVPlayer play];
            } 

        else if (event.subtype == UIEventSubtypeRemoteControlPause) 
            {
            [AVPlayer pause];
            } 
        else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) 
            {
                if (!AVPlayer.playing) 
                    {
                        [AVPlayer play];

                    } else if (AVPlayer.playing) 
                    {
                        [AVPlayer pause];
                    }
            }
        else if (event.subtype == UIEventSubtypeRemoteControlNextTrack)
            {
            [self myNextTrackMethod];
            }
        else if (event.subtype == UIEventSubtypeRemoteControlPreviousTrack)
            {
            [self myLastTrackMethod];
            }
        }
}

非常感谢你,太完美了,回复时间也太快了!我怎么才能选择你的答案呢?@DejanLukić看起来你已经找到答案了!很乐意帮忙!我已经对我的答案进行了编辑,这将使它更适合你的需要。完美无瑕!事实上,比我需要的更多。再次感谢@DejanLukić没问题,如果您正在考虑添加下一个/最后一个曲目功能,可以通过创建一个曲目名称数组,告诉您的下一个/最后一个方法播放该数组的objectAtIndex,并从中添加或减去以在歌曲之间导航来轻松完成。谢谢,这将在将来派上用场,正如我在这方面看到的所有例子比你刚才描述的要困难得多,但目前我只需要一个声音作为闹钟。关于你的答案/评论,最好的一点是没有过于复杂的块,谢谢!我知道已经选择了答案,因此您的问题得到了解决,但我无法理解在屏幕已锁定的情况下,您的程序是如何运行的。@设备这是通过指定“必需的后台模式”来完成的在.plist文件中告诉iOS,即使应用程序不在前台,也应允许它播放音频。@MDT是,因此当您关闭应用程序时,音频将继续运行,但当设备锁定时,您的应用程序将不运行。那么,如果设备已经被锁定,它怎么能告诉iOS播放歌曲呢?@DevinGund我想我明白你的意思了,我确信iOS只是在监听最近调用播放会话并触发此应用程序自动控制事件的应用程序。@DevinGund我不太清楚你想说什么。我的意思是让我的应用程序保持运行,然后当它自动锁定,或者用户按下锁定按钮时,我希望我的声音在预先指定的时间播放。我希望这能把事情弄清楚。