重置和设置播放列表以及现在在MPMusicPlayerController中播放的有效方法

时间:2019-03-19 23:27:42

标签: ios objective-c xcode mpmusicplayercontroller

好的。因此,这是我为系统音乐播放器设置新歌曲和播放列表而编写的一些非常糟糕的代码。可以,但是效率低下。我的意思是,尽管在播放某首歌时设置一首新歌效果很好,但如果播放器没有歌曲且没有播放列表(即使主音乐应用程序注册了一首歌,显然会暂停),这也会发生很多情况, 5秒钟以设置新的播放列表并播放歌曲。我需要编写高效的代码来做到这一点,而无需花费5秒钟。但是,在播放新歌曲之前,我还需要清除以前正在播放的列表,因为如果正在播放一首歌曲,而我只是尝试将其替换为新的播放列表(在为null的情况下效果很好,但仍然可以需要5秒钟),手机上的所有音乐应用都会崩溃,我必须重新启动手机才能再次使用它们。

因此要重申,在不删除基本功能的情况下(如果前一个播放列表不为null,请清除上一个播放列表,添加一个新的播放列表,添加一个新的正在播放的歌曲,然后播放该歌曲),我该如何提高效率。

谢谢。

musicController1 = [MPMusicPlayerController systemMusicPlayer]; //make the music controller
MPMediaItem *nullCHK1 = [musicController1 nowPlayingItem]; //if its empty, take evasive action!
if (nullCHK1.title == NULL){
    [musicController1 setQueueWithQuery: everything];
    [musicController1 setNowPlayingItem:item];
    //[self changeSongValues]; //set current song (will not update but thats fine)
    [musicController1 prepareToPlay];

    [musicController1 play];
}

//we first need to make sure that we are not playing anything so our phone doesn't crash
MPMediaPropertyPredicate *predicate =
[MPMediaPropertyPredicate predicateWithValue: @"Non_Existant_Song_Name"
                                 forProperty: MPMediaItemPropertyTitle];
MPMediaQuery *q = [[MPMediaQuery alloc] init];
[q addFilterPredicate: predicate];
[musicController1 setQueueWithQuery:q];
musicController1.nowPlayingItem = nil;
[musicController1  stop];

//then we set a new play state

//NSLog(@"index: %d", selectedItem);
[musicController1 setQueueWithQuery: everything];
[musicController1 setNowPlayingItem:item];
//[self changeSongValues]; //set current song (will not update but thats fine)
[musicController1 prepareToPlay];

[musicController1 play];

0 个答案:

没有答案