在MPNowPlayingInfoCenter中设置值无效

时间:2013-12-04 23:31:39

标签: ios audio ios7

我正在编写一个播放音频的应用,我正在尝试将当前曲目信息显示在锁定屏幕和控制面板上。这是我正在使用的代码:

- (void)setupNowPlayingInfo:(MPMediaItem*)mi
{
    NSArray* keys = @[MPMediaItemPropertyAlbumTitle,
                      MPMediaItemPropertyAlbumTrackCount,
                      MPMediaItemPropertyAlbumTrackNumber,
                      MPMediaItemPropertyArtist,
                      MPMediaItemPropertyArtwork,
                      MPMediaItemPropertyComposer,
                      MPMediaItemPropertyDiscCount,
                      MPMediaItemPropertyDiscNumber,
                      MPMediaItemPropertyGenre,
                      MPMediaItemPropertyPersistentID,
                      MPMediaItemPropertyPlaybackDuration,
                      MPMediaItemPropertyTitle];

    NSMutableDictionary* d = [NSMutableDictionary dictionary];
    for (NSString* key in keys) {
        if ([mi valueForProperty:key]) {
            d[key] = [mi valueForProperty:key];
        }
    }

    d[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @0.5;   // TODO:
    d[MPNowPlayingInfoPropertyPlaybackRate] = @1;
    d[MPNowPlayingInfoPropertyPlaybackQueueIndex] = @(self.currentSongIndex);
    d[MPNowPlayingInfoPropertyPlaybackQueueCount] = @(self.songs.count);
    d[MPNowPlayingInfoPropertyChapterNumber] = @0;
    d[MPNowPlayingInfoPropertyChapterCount] = @0;

    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = d;
}

这没有效果。我在远程控制事件的文档中看到了这个有趣的界限(这对我来说也不起作用):

  

您的应用必须是“正在播放”应用。重申,即使您的应用是   第一个响应者,你打开了事件交付,你的应用程序   在开始播放音频之前,它不会收到遥控事件。

我的应用程序必须做什么才能成为“正在播放”的应用程序?这绝对是播放音频。

可能有必要知道我只需要在iOS 7上工作,而我正在使用The Amazing Audio Engine

1 个答案:

答案 0 :(得分:0)

您需要先设置背景音频

使用音频会话

// Set AVAudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];

// Change the default output audio route
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
                        sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];