13

iOS 上的 Spotify 有一个非常有趣的控制中心集成。注意下面的汉堡按钮。

汉堡包

锁屏上也是一样!

锁屏

他们是怎么做到的?MPMediaCenter 中有 API 吗?

4

1 回答 1

18

是的,有一个 API

查看苹果文档中有关远程控制事件的说明,您将获得两个类MPRemoteCommandMPRemoteCommandCenter突出显示。查找MPRemoteCommandCenter将显示有许多命令,likeCommand或者dislikeCommand您可以为其添加处理程序。将处理程序添加到这些命令会导致它们在控制中心中显示。

下面是一些多合一的代码,实现了与屏幕截图中显示的几乎完全相同的结果:

- (void)showCustomizedControlCenter {
    /* basic audio initialization */
    NSString *soundFilePath = [NSString stringWithFormat:@"%@/test.mp3", [[NSBundle mainBundle] resourcePath]];
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
    self.player.numberOfLoops = -1;
    [self.player play];

    /* registering as global audio playback */
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

    /* the cool control center registration */
    MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
    [commandCenter.playCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) {
        return MPRemoteCommandHandlerStatusSuccess;
    }];
    [commandCenter.dislikeCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) {
        return MPRemoteCommandHandlerStatusSuccess;
    }];
    [commandCenter.likeCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) {
        return MPRemoteCommandHandlerStatusSuccess;
    }];
    [commandCenter.nextTrackCommand addTargetWithHandler:^MPRemoteCommandHandlerStatus(MPRemoteCommandEvent *event) {
        return MPRemoteCommandHandlerStatusSuccess;
    }];

    /* setting the track title, album title and button texts to match the screenshot */ 
    commandCenter.likeCommand.localizedTitle = @"Thumb Up";
    commandCenter.dislikeCommand.localizedTitle = @"Thumb down";

    MPNowPlayingInfoCenter* info = [MPNowPlayingInfoCenter defaultCenter];
    NSMutableDictionary* newInfo = [NSMutableDictionary dictionary];

    [newInfo setObject:@"Mixtape" forKey:MPMediaItemPropertyTitle];
    [newInfo setObject:@"Jamie Cullum" forKey:MPMediaItemPropertyArtist];

    info.nowPlayingInfo = newInfo;
}

除了编写代码之外,您还需要

  • 添加AVFoundation到您的项目中
  • #import <AVFoundation/AVFoundation.h>#import <MediaPlayer/MediaPlayer.h>
  • 在应用程序设置中激活背景模式"Audio and AirPlay"

在此处输入图像描述 在此处输入图像描述

于 2015-05-15T18:07:12.820 回答