2012-04-10 15 views
9

現在、ネイティブミュージックアプリで現在再生されているキューをプログラム的に取得したいと考えています。 MPMusicPlayerControllerを使って現在再生しているアイテムを取得することはできますが、アイテムだけでなく再生キュー全体を取得したいと考えています。 AVFoundationまたは他のライブラリを使用して行うことはできますか?iOS - 現在再生中のアイテムのプログラムキューを取得する

は、私はこれができない怖いあなたに

+1

これが可能であると確信しています。 App Storeの「Ecoute」は、何らかの形で現在のキューをプログラムで取得しています。これは、アプリケーション内からキューを管理することとは関係ありません。例えば、アプリを完全に終了し、ミュージックアプリに入り、いくつかのトラックでプレイリストを作成して再生します。次に、再生中の画面にアプリを戻し、右上の時計アイコンをタップしてキューを表示します。そのプレイリストのすべてのトラックがキューに入っていることがわかります。どのプレイリストがどのようにわかったのですか?彼らは文書化されていないAPIを使用していますか? – sooper

+0

@sooper私は彼らが文書化されていないAPIを使っていると思います。下の私の答えを見てください。 – bugloaf

答えて

2

ありがとうございます。アップルは、いかなるライブラリからもこの情報にアクセスすることはできません。

-2

私はこれを調べていて、突然それがいかに単純かを理解しました!

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection 

mediaItemCollectionが現在のプレイリストです!

これが役に立ちます。

+0

これは間違っています。 mediaItemCollectionは、MPMediaPickerControllerの選択によって生成されたMPMediaItemCollectionです。これは現場で生成された新しい曲のリストであり、現在iPodのアプリで再生されている曲とは関係ありません。 –

+0

@ 0x7fffffffあなたは私のコメントにOPに投稿された考えがあるかどうか尋ねたがっていますか? – sooper

6

これはどのパブリックAPIからも可能ではないと確信しています。 @sooperがプライベートAPIを使用している必要があるEcouteアプリ。私は自分の音楽アプリのコードベースで少し実験をしました。まず、私は(先頭に#import <objc/runtime.h>を置く)iPodの音楽プレーヤーのすべてのメソッドをリストにこのコードを使用:

int i=0; 
unsigned int mc = 0; 
Method * mlist = class_copyMethodList([MPMusicPlayerController iPodMusicPlayer].class, &mc); 
NSLog(@"%d methods for class", mc); 
for(i=0;i<mc;i++) { 
    NSLog(@"\tMethod no #%d: %s", i, sel_getName(method_getName(mlist[i]))); 
} 
free(mlist); 

これはnumberOfItemsnowPlayingItemAtIndex:のようないくつかの興味深いメソッド名を上げ。だから私は、ファイルの先頭にこのカテゴリーを追加しました:

@interface MPMusicPlayerController (Private) 

- (NSInteger)numberOfItems; 
- (MPMediaItem*)nowPlayingItemAtIndex:(NSInteger)index; 

@end 

と、私はこのコードを実行しました:

NSInteger numberOfItems = [[MPMusicPlayerController iPodMusicPlayer] numberOfItems]; 
for (NSInteger i = 0; i < numberOfItems; i++) { 
    MPMediaItem* mi = [[MPMusicPlayerController iPodMusicPlayer] nowPlayingItemAtIndex:i]; 
    NSLog(@"%@", [mi valueForProperty:MPMediaItemPropertyTitle]); 
} 

と案の定を、それは私が音楽アプリにキューイングされていたプレイリストをプリントアウト!

もちろん、これらの方法をこのように呼び出すと、Appleはあなたのアプリを拒否しますが、hide private API calls from Appleへの道があります。

+0

答えをいただきありがとうございます。私は最後にコメントして以来、問題のアプリから機能が削除されたようです。 – sooper

関連する問題