12

使用 ios 7 音乐应用播放歌曲时,用户可以使用滑块在锁定屏幕/控制中心更改歌曲位置。滑块处于活动状态:

在此处输入图像描述

但是在我的应用程序中播放音乐时,用户不能这样做。滑块未激活:

在此处输入图像描述

如何在我的应用中启用这些功能?

4

3 回答 3

13

您可以在 iOS 9.1 及更高版本上借助 MPRemoteCommandCenter 更改轨道位置。

if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_0) {
            MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];
            [commandCenter.changePlaybackPositionCommand setEnabled:true];
            [commandCenter.changePlaybackPositionCommand addTarget:self action:@selector(changedThumbSliderOnLockScreen:)];
        }

和方法

- (MPRemoteCommandHandlerStatus)changedThumbSliderOnLockScreen:(MPChangePlaybackPositionCommandEvent *)event
{
    // change position
    [self setCurrentPlaybackTime:event.positionTime];
    // update MPNowPlayingInfoPropertyElapsedPlaybackTime
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];

    return MPRemoteCommandHandlerStatusSuccess;
}
于 2016-10-16T21:52:37.683 回答
7

swift4 您可以在 iOS 9.1 及更高版本上借助 MPRemoteCommandCenter 更改轨道位置。

let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.changePlaybackPositionCommand.isEnabled = true
commandCenter.changePlaybackPositionCommand.addTarget(
 self, action:#selector(changePlaybackPositionCommand(_:)))

和方法

@objc func changePlaybackPositionCommand(_ event:
          MPChangePlaybackPositionCommandEvent) -> MPRemoteCommandHandlerStatus {
    let time = event.positionTime
    //use time to update your track time
    return MPRemoteCommandHandlerStatus.success
}

commandCenter请注意,如果您希望启用该推荐,则必须为每个命令执行此操作。

于 2018-01-08T09:27:01.620 回答
5

我一直在寻找同样的东西,但我认为这是不可能的,请参阅这篇文章:

如何在 iOS 锁屏控制面板中启用音频清理器?

像 Spotify 和 Soundcloud 这样的流行应用程序也没有实现这一点。

如果您正在寻找一种在锁定屏幕上显示当前音乐的方法,您需要执行以下操作。

首先,当您播放新曲目时更新 NowPlayingInfo :

NSMutableDictionary *songInfo = [[NSMutableDictionary alloc] init];

    [songInfo setObject:trackTitle forKey:MPMediaItemPropertyTitle];
    [songInfo setObject:artistName forKey:MPMediaItemPropertyArtist];
    [songInfo setObject:duration forKey:MPMediaItemPropertyPlaybackDuration];
    [songInfo setObject:releaseDate forKey:MPMediaItemPropertyReleaseDate];
    [songInfo setValue:playbackRate forKey:MPNowPlayingInfoPropertyPlaybackRate];
    [songInfo setObject:elapsedTime forKey:MPNowPlayingInfoPropertyElapsedPlaybackTime];
    [songInfo setObject:albumArtImage forKey:MPMediaItemPropertyArtwork];
    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];

要处理来自锁屏的事件,您首先需要告诉您的应用程序开始接收来自遥控器的事件。我使用以下代码在我的 AppDelegate 的应用程序 didFinishLaunchingWithOptions 中执行此操作

 // Turn on remote control event delivery
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

接下来,您需要实现 remoteControlReceivedWithEvent 方法来处理捕获的事件。在 APPDelegate 添加以下方法

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {

 if (receivedEvent.type == UIEventTypeRemoteControl) {

    switch (receivedEvent.subtype) {
        case UIEventSubtypeRemoteControlPause:
            //pause code here
            break;

        case UIEventSubtypeRemoteControlPlay:
             //play code here
            break;

        case UIEventSubtypeRemoteControlPreviousTrack:
            // previous track code here
            break;

        case UIEventSubtypeRemoteControlNextTrack:
            //next track code here
            break;

        default:
            break;
    }
 }

}

苹果文档中有关 MPNowPlayingInfoCenter 的更多信息-> https://developer.apple.com/library/ios/documentation/mediaplayer/reference/MPNowPlayingInfoCenter_Class

于 2014-01-17T09:31:42.187 回答