私のアプリでは、バックグラウンドとリモコンを再生できるiPodミュージックライブラリと同じように音楽再生を実装したいと思います。
私のアプリは:メインページにいくつかのアイテムがあるテーブルビューです。音楽アイテムを選択すると、音楽ビューに入り、ダウンロードした音楽ユーザーが表示されます。このページで、ユーザーは再生する曲を選択できます。
シングルトンでカスタムPlayerクラスを作成して、音楽がミュージックビューページを離れてもイベントを再生できるようにします。今私の問題は、リモコンを実装する方法です。私はAppleガイドを使用してこの方法を試しまし た。アプリが音楽ビューページにあり、バックグラウンドに移動すると、実際に機能します。
ただし、アプリが別のページにあり、音楽が再生されている場合、リモコンは失敗し、何も呼び出されません。
私のコードは次のようなものです:
[self.navigationController pushViewController:musicViewController animated:YES];
MusicViewControllerには、次のようなシングルトンプレーヤーがあります。
@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
アプリが音楽ビューページを離れるとき、私はここでsthをしました
- (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音楽と同じ機能、特にバックグラウンド再生とリモコンを備えた音楽プレーヤーを実装するにはどうすればよいですか?
私の推測が間違っている場合、リモートイベントを受信するようにするにはどうすればよいですか(シングルトンクラス)?
ありがとう!!