- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用中,我想实现像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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!