gpt4 book ai didi

ios - remoteControlReceivedWithEvent 不在单例类中调用

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:12 24 4
gpt4 key购买 nike

在我的应用中,我想实现像iPod音乐库一样的音乐播放,可以后台播放和远程控制。

我的应用程序是:主页中有几个项目的表格 View ,选择音乐项目将进入音乐 View 并显示用户下载的音乐。然后在此页面中用户可以选择要播放的歌曲。

我在单例中创建了一个自定义播放器类,这样音乐仍然可以播放离开音乐 View 页面的事件。现在我的问题是如何实现远程控制。我使用 Apple guide 尝试过这种方式.当应用程序位于音乐查看页面然后进入后台时,它确实有效。

但是,如果app在其他页面,并且正在播放音乐,则远程控制失败,没有任何调用。

我的代码是这样的:


[self.navigationController pushViewController:musicViewController animated:YES];

The MusicViewController has a singleton player, which is like:



@interface FWAudioPlayer : UIViewController// I also tried to subclass of UIResponder, and it didn't work either
{
NSUInteger currectIndex;
NSMutableArray *_urlArray;
NSMutableArray *randomArray;

AVAudioPlayer *_player;
id fwDelegate;


}

@property (nonatomic, retain) NSMutableArray *urlArray;
@property (nonatomic, retain) NSMutableArray *randomArray;
@property (nonatomic, retain) AVAudioPlayer *audioPlayer;
@property (nonatomic, assign) id fwDelegate;
@property (nonatomic, assign) NSUInteger currectIndex;
@property (nonatomic, assign) BOOL shuffle;
+ (id)sharedAudioPlayerWithData:(NSData *)data error:(NSError **)error;
+ (id)sharedAudioPlayer;
@end

当应用程序离开音乐查看页面时,我在这里做了某事



- (void)viewWillDisappear:(BOOL)animated
{
FWAudioPlayer *fwaudioPlayer = [FWAudioPlayer sharedAudioPlayer];
[fwaudioPlayer 成为第一响应者];

}

顺便说一句,我已经在AppDelegate中设置了:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

现在当应用离开音乐查看页面时,我可以发现 [FWAudioPlayer canBecomeFirstResponder] 被调用了。然后我点击 Remote ,[FWAudioPlayer remoteControlReceivedWithEvent:] 永远不会被调用。然后我尝试在 AppDelegate 中接收远程控制事件。如果它可以在 AppDelegate 中接收事件,我可以分派(dispatch)事件处理并调用单例类。但是,它似乎永远不会在 AppDelegate 中被调用。

所以我想知道这里有什么问题。我的猜测是单例类 FWAudioPlayer 不是真正的 UIViewController 因为它不在 View 下应用程序的层次结构。此外,当应用程序离开到其他页面(如主页)时,MainViewController 是第一响应者,FWAudioPlayer 永远无法获取远程事件。

如果我是对的,我怎样才能实现一个像iPod music一样功能的音乐播放器,尤其是后台播放和远程控制?

如果我猜错了,如何让它(单例类)接收到远程事件?

谢谢!!

最佳答案

我关注这个 answer 。我将 UIWindow 子类化并自己分派(dispatch)事件。但是我还是想知道为什么单例类收不到 Remote 。

如果有人告诉我,我会选择那个答案。

我在 Event handling by Apple 中找到了答案,它为响应者描述得很清楚。

关于ios - remoteControlReceivedWithEvent 不在单例类中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com