gpt4 book ai didi

objective-c - 更新媒体收集队列 MPMediaItemCollection 时短暂停止/开始“正在播放”项目

转载 作者:行者123 更新时间:2023-12-03 06:15:33 24 4
gpt4 key购买 nike

我正在使用 xcode 中的苹果 addMusic 示例应用程序,因为我希望能够添加类似的功能(在应用程序的后台播放用户选择的音乐队列)。

它会做一件恼人的事情,当用户在内置 MediaPicker 中选择歌曲后点击“完成”按钮时,音乐播放器会短暂停止然后再次播放。- 我假设这是因为苹果使用的方法,该方法应用一个新数组作为队列,并将当前播放状态重置为它停止的位置(如下所示:)

        // apply the new media item collection as a playback queue for the music player
[self setUserMediaItemCollection: mediaItemCollection];
[musicPlayer setQueueWithItemCollection: userMediaItemCollection];
[self setPlayedMusicOnce: YES];
[musicPlayer play];

// Obtain the music player's state so it can then be
// restored after updating the playback queue.
} else {

// Take note of whether or not the music player is playing. If it is
// it needs to be started again at the end of this method.
BOOL wasPlaying = NO;
if (musicPlayer.playbackState == MPMusicPlaybackStatePlaying) {
wasPlaying = YES;
}

// Save the now-playing item and its current playback time.
MPMediaItem *nowPlayingItem = musicPlayer.nowPlayingItem;
NSTimeInterval currentPlaybackTime = musicPlayer.currentPlaybackTime;

// Combine the previously-existing media item collection with the new one
NSMutableArray *combinedMediaItems = [[userMediaItemCollection items] mutableCopy];
NSArray *newMediaItems = [mediaItemCollection items];
[combinedMediaItems addObjectsFromArray: newMediaItems];

[self setUserMediaItemCollection: [MPMediaItemCollection collectionWithItems: (NSArray *) combinedMediaItems]];

// Apply the new media item collection as a playback queue for the music player.
[musicPlayer setQueueWithItemCollection: userMediaItemCollection];

// Restore the now-playing item and its current playback time.
musicPlayer.nowPlayingItem = nowPlayingItem;
musicPlayer.currentPlaybackTime = currentPlaybackTime;

// If the music player was playing, get it playing again.
if (wasPlaying) {
[musicPlayer play];

}
}


}
}

// If the music player was paused, leave it paused. If it was playing, it will continue to
// play on its own. The music player state is "stopped" only if the previous list of songs
// had finished or if this is the first time the user has chosen songs after app
// launch--in which case, invoke play.

- (void) restorePlaybackState {

if (musicPlayer.playbackState == MPMusicPlaybackStateStopped && userMediaItemCollection) {

if (playedMusicOnce == NO) {

[self setPlayedMusicOnce: YES];
[musicPlayer play];
}
}

}

有人遇到过这个问题吗?有没有任何人都能想到的替代/更有效的方法?

提前感谢分享:)

最佳答案

只需在音乐播放器更改通知时将更改应用到 MPMediaItemCollection。

关于objective-c - 更新媒体收集队列 MPMediaItemCollection 时短暂停止/开始“正在播放”项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13109200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com