わかりました、ユーザーが iPod ライブラリから曲を選択して聴けるようにしようとしていますが、アプリでリモコン通知 (ヘッドフォン、ロック画面の OSD など) を受け取りたいので、追加の操作を行うことができます。これまでのところ、iPod の音楽を再生するか、ヘッドフォンのイベントを取得できますが、両方を同時に取得することはできません。
これが私がこれまでに知っていることです...
MPMusicPlayer を使用すると、音楽ライブラリ全体にプログラムで簡単にアクセスできます。ただし、アプリケーションではなく、applicationMusicPlayer を使用するか ipodMusicPlayer を使用するかに関係なく、リモート通知を受け取ります。
AVAudioPlayer (アプリのほとんどのサウンドに Apple が推奨するプレーヤー) を使用すると、リモート通知を簡単に取得できますが、iPod ライブラリにネイティブにアクセスすることはできません。
AVAudioPlayer はアセット URL で初期化でき、iPod ライブラリ (MPMediaItem 型) のトラックには NSURL インスタンスを返す URL プロパティがあります。これは、ドキュメントでは AVAsset オブジェクトで使用することを明示的に示していますが、それを使用して AVAudioPlayer を初期化しようとすると、 NSURL、失敗します。(MP3 である iPod で「現在再生中」のトラックを使用し、有効な NSURL オブジェクトを返しましたが、初期化に失敗しました。さらに悪いことに、それが Audible.com ファイルの場合、NSURL プロパティのフラットアウトは nil を返しました。)
AVAudioPlayer のインスタンスを使用してリモート イベントを取得し (たとえば、空のサウンド ファイルを使用)、同時に MPMusicPlayer クラスを使用して iPod の音楽を再生しようとすると、実際に iPod の再生を開始するまでリモート コントロール アクセスが可能であり、その時点で失われます。オーディオ セッションが非アクティブになり、システム オーディオ セッションがアクティブになるためです。
#4 と同じことを試して、代わりにオーディオ セッションのカテゴリをミックス可能なバリアントに設定すると、セッションは非アクティブになりませんが、iPod が再生を開始すると、リモート コントロール機能は失われます。
要するに、MPMusicPlayer が再生されているときはいつでもリモート イベントを取得できないようで、MPMusicPlayer を使用する以外に iPod のライブラリからコンテンツを再生する方法を知りません。
これを回避する方法についての提案は大歓迎です。クリエイティブまたはフラットアウトクレイジー。それが機能する限り、気にしないでください。
誰?誰?ビューラー?ビューラー?
M