2012-04-10 17 views
9

Tôi muốn nhận hàng đợi theo chương trình hiện được phát trong Ứng dụng nhạc gốc. Tôi có thể sử dụng MPMusicPlayerController để hiện đang phát mục nhưng tôi không chỉ nhận được mục mà cả hàng đợi phát. Có thể làm điều đó bằng cách sử dụng AVFoundation hoặc bất kỳ thư viện nào khác không?iOS - nhận hàng đợi lập trình các mục hiện đang phát

Cảm ơn bạn

+1

Tôi chắc chắn rằng điều này là có thể. 'Ecoute' trong App Store bằng cách nào đó có thể truy lục hàng đợi hiện tại bằng cách nào đó, và điều này không liên quan gì đến việc quản lý hàng đợi từ bên trong ứng dụng. Ví dụ: hoàn toàn thoát khỏi ứng dụng, truy cập ứng dụng Nhạc và tạo danh sách phát với một vài bản nhạc và phát nó. Sau đó quay trở lại ứng dụng trên màn hình hiện đang phát và nhấn vào biểu tượng đồng hồ ở trên cùng bên phải để xem hàng đợi. Bạn sẽ thấy rằng tất cả các bản nhạc trong danh sách phát đó đều có trong hàng đợi. Làm cách nào để biết danh sách phát nào? Họ có đang sử dụng các API không có giấy tờ không? – sooper

+0

@sooper Tôi nghĩ rằng họ đang sử dụng các API không có giấy tờ. Xem câu trả lời của tôi dưới đây. – bugloaf

Trả lời

2

Tôi e rằng điều này là không thể. Apple không cung cấp cho chúng tôi quyền truy cập vào thông tin này từ bất kỳ thư viện nào.

-2

Tôi đã xem xét điều này và đột nhiên nhận ra nó đơn giản như thế nào!

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

mediaItemCollection là danh sách phát hiện tại!

hy vọng điều này sẽ hữu ích.

+0

Điều này không đúng. mediaItemCollection là một MPMediaItemCollection được tạo bởi vùng chọn trong MPMediaPickerController. Đây là danh sách các bài hát mới được tạo ngay tại chỗ và không liên quan gì đến các bản nhạc đang phát trong ứng dụng iPod. –

+0

@ 0x7fffffff chỉ muốn hỏi xem bạn có bất kỳ suy nghĩ nào về nhận xét của tôi được đăng lên OP không? – sooper

6

Tôi chắc chắn điều này là không thể thông qua bất kỳ API công khai nào. Ứng dụng Ecoute mà @sooper đề cập phải sử dụng API riêng tư. Tôi đã làm một thử nghiệm nhỏ trong codebase của ứng dụng âm nhạc của riêng tôi. Trước tiên tôi sử dụng mã này để liệt kê tất cả các phương pháp trong máy nghe nhạc iPod (đặt #import <objc/runtime.h> ở đầu trang):

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); 

này bật lên một số tên phương pháp hấp dẫn như numberOfItemsnowPlayingItemAtIndex:. Vì vậy, tôi thêm vào thể loại này ở phía trên cùng của tập tin:

@interface MPMusicPlayerController (Private) 

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

@end 

và tôi chạy mã này:

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

và chắc chắn đủ, nó in ra danh sách nhạc mà tôi đã xếp hàng trong ứng dụng Nhạc !

Tất nhiên, nếu bạn gọi những phương pháp này theo cách này, Apple sẽ từ chối ứng dụng của bạn, nhưng có một cách để hide private API calls from Apple.

+0

Cảm ơn câu trả lời, có vẻ như chức năng đã bị xóa khỏi ứng dụng được đề cập kể từ lần cuối tôi nhận xét. – sooper

Các vấn đề liên quan