3

私のアプリでは、バックグラウンドとリモコンを再生できる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音楽と同じ機能、特にバックグラウンド再生とリモコンを備えた音楽プレーヤーを実装するにはどうすればよいですか?

私の推測が間違っている場合、リモートイベントを受信するようにするにはどうすればよいですか(シングルトンクラス)?

ありがとう!!

4

2 に答える 2

4

私はこの答えに従います。UIWindowをサブクラス化し、自分でイベントをディスパッチします。しかし、シングルトンクラスがリモコンを受信できない理由を知りたいのです。

誰かが私にそれを言うなら、私はその答えを選びます。

私はAppleによるイベント処理で答えを見つけました、そしてそれはレスポンダーのためにはっきりと説明します。

于 2011-10-25T08:46:07.407 に答える
1

最初の対応者になることができるかどうかを確認してください

(BOOL)canBecomeFirstResponder {
    return YES;
}
于 2012-01-04T11:12:23.327 に答える