1

iPodが現在再生中のアイテム(曲)を変更したときに通知を受け取りたいこのテストアプリを実行しています。アプリがフォアグラウンドにある間はテストはうまく機能しますが、アプリがバックグラウンドに移行するとすぐに通知が停止します大丈夫です。もう一度アプリをタップすると (フォアグラウンドに来ます)、アプリがバックグラウンドにある間に現在再生中のものが変更されたときにすべての通知を受け取りますが、毎回同じ曲の情報を取得しているので、どうすれば取得できますか?各通知の正しい曲情報?

これは、AppDelegate で行ったテストです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    MPMusicPlayerController *player = [MPMusicPlayerController iPodMusicPlayer];

    [notificationCenter addObserver:self
                           selector:@selector(nowPlayingItemChanged:)
                               name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
                             object:player];

    [player beginGeneratingPlaybackNotifications];

    return YES;
}

-(void) nowPlayingItemChanged:(NSNotification *)notification {
    MPMusicPlayerController *player = (MPMusicPlayerController *)notification.object;

    MPMediaItem *song = [player nowPlayingItem];

    if (song) {
        NSString *title = [song valueForProperty:MPMediaItemPropertyTitle];
        NSString *album = [song valueForProperty:MPMediaItemPropertyAlbumTitle];
        NSString *artist = [song valueForProperty:MPMediaItemPropertyArtist];
        NSString *playCount = [song valueForProperty:MPMediaItemPropertyPlayCount];

        NSLog(@"title: %@", title);
        NSLog(@"album: %@", album);
        NSLog(@"artist: %@", artist);
        NSLog(@"playCount: %@", playCount);
    }
}
4

2 に答える 2

1

バックグラウンドでのオプションがかなり制限されているこの投稿を参照してください。

StackOverFlow 投稿

そして、その状態に関する Apple Docs は実際には不可能です: Apple Documentation on Background states

于 2012-10-06T15:25:46.963 に答える
-1

バックグラウンドに入るときは、必ずオブザーバーを削除してください。

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification object:musicPlayer];[player endGeneratingPlaybackNotifications];

フォアグラウンドに入るときに再度追加します。

于 2013-07-16T13:40:55.037 に答える