我在本地iOS音樂應用中遇到了一些問題以獲取當前正在播放的歌曲信息,如(標題,藝術家...)。在原生iOS音樂應用中檢測當前正在播放的歌曲信息
這是確切的問題,我的應用程序使用MPMusicPlayerController
與iPodMusicPlayer
此屬性是調用myPlayer
。當用戶控制我的應用程序中,我能夠顯示當前歌曲以這種方式播放信息的音樂...
- (void)getTrackDescription {
// getting whats currently playing
self.nowPlayingItem = [myPlayer nowPlayingItem];
// song title currently playing
self.title = [self.nowPlayingItem valueForProperty:MPMediaItemPropertyTitle];
// if title is not fund Unknown will be displayed
if (title == (id)[NSNull null] || title.length == 0) {
title = @"Unknown";
}
// artist currently playing
self.artist = [self.nowPlayingItem valueForProperty:MPMediaItemPropertyArtist];
// if artist is not fund Unknown will be displayed
if (artist == (id)[NSNull null] || artist.length == 0) {
artist = @"Unknown";
}
//[self.currentlyPlaying setLineBreakMode:NSLineBreakByWordWrapping];
// displaying current artist and title song playing
[self.currentlyPlaying setText:[NSString stringWithFormat:@"%@ - %@", artist, title]];
}
但是,問題就來了,當用戶離開應用程序在後臺或只是使用控制中心更改歌曲。如果用戶繼續使用控制中心或音樂應用程序本身,我的應用程序仍會顯示上一首歌曲信息,並且沒有任何更新。
我試圖解決這個問題這樣...
- (void)viewDidLoad {
[super viewDidLoad];
if (self.myPlayer.playbackState == MPMusicPlaybackStatePlaying || self.myPlayer.playbackState == MPMusicPlaybackStateSeekingForward || self.myPlayer.playbackState == MPMusicPlaybackStateSeekingBackward){
// updating track name regardless the user uses app controllers or not
[self getTrackDescription];
}
}
我甚至嘗試註釋如果條件看,如果我得到了這樣的歌曲信息,但它是同樣的問題。
嗯,我希望有人能幫助我解釋我在做什麼錯..提前
謝謝...!
UPDATE
這是我目前所面對的...我getTrackDescription邏輯是相同的,但簽名改成這- (void)getTrackDescription:(id)notification
- (void)viewWillAppear:(BOOL)animated{
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(getTrackDescription:)
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
object:self.myPlayer];
[self.myPlayer beginGeneratingPlaybackNotifications];
}
-(void)viewWillDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMusicPlayerControllerPlaybackStateDidChangeNotification
object:self.myPlayer];
[self.myPlayer endGeneratingPlaybackNotifications];
}
我應該在我的getTrackDescription或viewDidLoad內執行該操作嗎? – NorthBlast
您應該在viewWillAppear:中添加自己作爲觀察者,並在viewDidDisappear:中移除觀察者。您需要在通知回調中調用'getTrackDescription'。 –
好的,我試圖實現你的建議,但我沒有得到它正常工作,你能看到我的更新部分的帖子,讓我知道最新的問題..或任何建議.. @ 0x7fffffff – NorthBlast