2011-10-25 13 views
3

私のアプリでは、バックグラウンドとリモートコントロールを再生できるiPodミュージックライブラリのように音楽を再生したいと思います。remoteControlReceivedWithEventがシングルトンクラスを呼び出さない

私のアプリケーションは:メインページにいくつかの項目を持つテーブルビュー、それは音楽ビューを入力し、ダウンロードmusicsユーザーを表示する音楽アイテムを選択します。このページでは、ユーザーが再生する曲を選択することができます。

シングルプレーヤーでカスタムプレーヤークラスを作成して、ミュージックビューページから離れるイベントを再生できるようにします。今私の問題は、リモートコントロールを実装する方法です。私は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をサブクラス化し、イベントを自分でディスパッチします。 しかし、私はまだシングルトンクラスがリモートコントロールを受け取れない理由を知りたいです。

誰かが私に言ったら、私はその答えを選ぶでしょう。

私はアップルのイベント処理の回答を見つけました。それは応答者のために明確に記述されています。

1

それは

(BOOL)canBecomeFirstResponder { 
    return YES; 
} 
ファーストレスポンダになることができるかどうかだけを確認してください
関連する問題