Tho*_*sen 22 cocoa-touch audio-player ios
我正在尝试接收有关iOS应用中当前播放曲目的信息.当iPhone 未连接到配件时,这非常好用.如果我将它连接到我的汽车(欧宝Astra,iPhone插孔),以下代码将停止工作,如文档中所述:
如果您创建iPod音乐播放器并且用户使用Home Sharing播放来自其他库的项目,则此属性的值为
nil
.
码:
// nil while connected to an accessory
MPMediaItem *nowPlayingMediaItem =
[[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem];
// Works while not connected to an accessory
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
Run Code Online (Sandbox Code Playgroud)
我甚至试过"hacky"之类的东西,比如访问"私有"属性(原始代码):
MPMediaQuery *query=nil;
MPMediaItemCollection *collection=nil;
id internalPlayer=nil;
Ivar internalPlayeriVar = object_getInstanceVariable(iPod, "_internal", NULL);
internalPlayer = object_getIvar(iPod, internalPlayeriVar);
NSLog(@"internalPlayer: %@", internalPlayer);
Ivar queryIvar = object_getInstanceVariable(internalPlayer, "_query", NULL);
query = object_getIvar(internalPlayer, queryIvar); // nil everytime
Ivar collectionIvar = object_getInstanceVariable(internalPlayer,
"_itemCollection", NULL);
collection = object_getIvar(internalPlayer, collectionIvar); // nil everytime
Run Code Online (Sandbox Code Playgroud)
或者调用私有方法:
// Same behaviour like [iPod nowPlayingItem], works
// only while no accessory is connected
MPMediaItem *nowPlayingMediaItem =
[iPod nowPlayingItemAtIndex:[iPod indexOfNowPlayingItem]];
// Works while not connected to an accessory
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
Run Code Online (Sandbox Code Playgroud)
它也没有解决访问新的MPNowPlayingInfoCenter
,它nil
所有的时间.
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo
Run Code Online (Sandbox Code Playgroud)
我的车直接播放我的音乐而不使用iPhone应用程序,似乎我的iPhone知道汽车当前正在播放什么,因为它在锁定屏幕上显示标题,艺术家和封面图标(仅在那里).内部播放次数也会增加.
如果我检查播放状态,它还会返回YES
汽车是否播放音乐:
[[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法(可能是通过调用私人方法)来访问该歌曲,该车目前正在播放?
在我将其报告为错误后,Apple 刚刚在 iOS 6.1 中“修复了该问题”。当我的 iPhone 连接到我的汽车时,以下代码现在可以运行:
MPMediaItem *nowPlayingMediaItem = [iPod nowPlayingItem];
NSString *title = [nowPlayingMediaItem valueForProperty:MPMediaItemPropertyTitle];
NSLog(@"Playing title: %@", title);
Run Code Online (Sandbox Code Playgroud)
而且,我真正喜欢的是:还可以使用 iPod 应用程序更改播放曲目 - 该应用程序按您的预期显示,而不是白色的大屏幕“连接到附件”。所以这也可以以编程方式工作。
归档时间: |
|
查看次数: |
6188 次 |
最近记录: |