无法使用 kMRMediaRemoteNowPlayingInfoArtworkData 在 Objective C 中从 Spotify 获取专辑封面

问题描述

我正在调整一个分叉的 TouchBar 应用程序,它在 Mac TouchBar 上显示小部件,并试图让专辑封面显示NowPlaying 小部件上。这是project

目前,我遇到了这段代码的问题:

- (void)updateInfo
{
    MRMediaRemoteGetNowPlayingInfo(dispatch_get_main_queue(),^(NSDictionary *info)
        {
            Nsstring *album = [info objectForKey:kMRMediaRemoteNowPlayingInfoAlbum];
            Nsstring *artist = [info objectForKey:kMRMediaRemoteNowPlayingInfoArtist];
            Nsstring *title = [info objectForKey:kMRMediaRemoteNowPlayingInfoTitle];
            NSData *artworkData = [info objectForKey:kMRMediaRemoteNowPlayingInfoArtworkData];
        
        NSImage *albumart = nil;
        if (nil != artworkData && ![artworkData isEqual:[NSNull null]])
        {
            albumart = [[NSImage alloc] initWithData:artworkData];
        }
        
        if (nil != albumart)
        {
            self.appIcon = albumart;
        }
        
        if (self.album != album || self.artist != artist || self.title != title || self.albumart != albumart)
        {
            self.album = album;
            self.artist = artist;
            self.title = title;
            self.albumart = albumart;

            [[NSNotificationCenter defaultCenter]
                postNotificationName:NowPlayingInfoNotification
                object:self];
        }
    });
}

我遇到的主要问题是专辑封面数据在歌曲开始后仅显示大约半秒,之后就消失了。我的理论是 kMRMediaRemoteNowPlayingInfoArtworkData 用于获取艺术品数据是错误的,但我可能是错的。

解决方法

发现如果从通知中心拉出,Spotify 和音乐不会立即更新他们的专辑封面数据。解决办法是增加50ms左右的延迟。