2011-10-25 54 views
3

在我的應用程序中,我想實現音樂播放,就像可以播放背景和遙控的iPod音樂庫一樣。remoteControlReceivedWithEvent不在單一類中調用

我的應用程序是:在主頁面中有幾個項目的表格視圖,選擇它將進入音樂視圖並顯示音樂用戶下載的音樂項目。然後在此頁面中,用戶可以選擇要播放的歌曲。

我創建了一個自定義播放器類的單身,使音樂仍然可以播放事件離開音樂瀏覽頁面。現在我的問題是如何實現遙控器。我試過這種方式使用Apple guide。當應用程序處於音樂視圖頁面,然後進入後臺時,它確實有效。

但是,如果應用程序在其他頁面中並且正在播放音樂,則遙控器失敗並且沒有任何呼叫。

我的代碼是某事像:


[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 becomeFirstResponder]; }

順便說一句,我已經在設置AppDelegate中:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

現在,當應用程序離開音樂瀏覽頁面時,我可以找到[FWAudioPlayer canBecomeFirstResponder]被調用。然後我點擊遙控器,[FWAudioPlayer remoteControlReceivedWithEvent:]永遠不會被調用。 然後我嘗試在AppDelegate中接收遠程控制事件。如果它可以在AppDelegate中接收事件,並且可以分派事件處理並調用單例類。但是,它似乎永遠不會在AppDelegate中調用。

所以我想知道這裏有什麼問題。我猜想單身人士課FWAudioPlayer不是真的UIViewController,因爲它不在應用程序的視圖層次結構下。此外,當應用程序離開主頁等其他頁面時,MainViewController是第一響應者,而FWAudioPlayer永遠無法獲得遠程事件。

如果我是對的,我如何實現一個音樂播放器與iPod音樂具有相同的功能,特別是後臺播放和遠程控制?

如果我的猜測是錯誤的,如何讓它(單身類)接收遠程事件?

謝謝!

回答

4

我關注此answer。 我將UIWindow子類化並自己發送事件。 但我仍然想知道爲什麼singleton類不能接收遙控器。

如果有人告訴我,我會選擇那個答案。

我在蘋果的事件處理中找到答案,它清楚地描述了響應者。

1

只要確定它是否可以成爲第一個響應

(BOOL)canBecomeFirstResponder { 
    return YES; 
} 
相關問題