How to change track position on lock screen/control center?

后端 未结 3 1083
青春惊慌失措
青春惊慌失措 2020-12-28 09:37

When playing a song with the ios 7 music app the user can use slider to change song position in the lock screen/the control center. Slider is active:

相关标签:
3条回答
  • 2020-12-28 09:57

    You can change track position with help of MPRemoteCommandCenter on iOS 9.1 and higher.

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

    and method

    - (MPRemoteCommandHandlerStatus)changedThumbSliderOnLockScreen:(MPChangePlaybackPositionCommandEvent *)event
    {
        // change position
        [self setCurrentPlaybackTime:event.positionTime];
        // update MPNowPlayingInfoPropertyElapsedPlaybackTime
        [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];
    
        return MPRemoteCommandHandlerStatusSuccess;
    }
    
    0 讨论(0)
  • 2020-12-28 10:02

    I was looking for the same thing but I don't think this is possible see this post:

    How to enable audio scrubber in iOS Lock Screen control panel?

    Also popular apps like Spotify and Soundcloud don't have this implemented.

    If you are looking for a way to show the current music on the lock screen you need to do the following.

    First when you play a new track update the 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];
    

    To handle events from the Lockscreen, you first need to tell your app to start receiving events from the remote control. I do this in the application didFinishLaunchingWithOptions of my AppDelegate using the following code

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

    Next you need to implement remoteControlReceivedWithEvent method to handle the captured events. In APPDelegate add the following method

    - (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;
        }
     }
    

    }

    More info on MPNowPlayingInfoCenter from the apple docs -> https://developer.apple.com/library/ios/documentation/mediaplayer/reference/MPNowPlayingInfoCenter_Class

    0 讨论(0)
  • 2020-12-28 10:04

    swift4 You can change track position with help of MPRemoteCommandCenter on iOS 9.1 and higher.

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

    and method

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

    Note that you have to do that for every command in commandCenter if you want that commend to be enabled.

    0 讨论(0)
提交回复
热议问题