//直接在appdelegate 里寫上這幾句代碼就可以實現后臺播放了
//后臺播放
- (void)applicationWillResignActive:(UIApplication *)application{
//開啟后臺處理多媒體事件
[[UIApplicationsharedApplication]beginReceivingRemoteControlEvents];
AVAudiosession * session=[AVAudioSessionsharedInstance];
[session setActive:YESerror:nil];
//后臺播放
[session setCategory:AVAudioSessionCategoryPlaybackerror:nil];
//這樣做,可以在按home鍵進入后臺后,播放一段時間,幾分鐘吧。但是不能持續播放網絡歌曲,若需要持續播放網絡歌曲,還需要申請后臺任務id,具體做法是:
//一個后臺任務標識符
UIBackgroundTaskIdentifier taskID;
taskID = [[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:^{
//如果系統覺得我們還是運行了太久,將執行這個程序塊,并停止運行應用程序
[[UIApplicationsharedApplication]endBackgroundTask:taskID];
}];
taskID=[AppDelegatebackgroundPlayerID:taskID];
//其中的_bgTaskId是后臺任務UIBackgroundTaskIdentifier _bgTaskId;
}
//實現一下backgroundPlayerID:這個方法:
+(UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId
{
//設置并激活音頻會話類別
AVAudioSession *session=[AVAudioSessionsharedInstance];
[session setCategory:AVAudioSessionCategoryPlaybackerror:nil];
[session setActive:YESerror:nil];
//允許應用程序接收遠程控制
[[UIApplicationsharedApplication]beginReceivingRemoteControlEvents];
//設置后臺任務ID
UIBackgroundTaskIdentifier newTaskId=UIBackgroundTaskInvalid;
newTaskId=[[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:nil];
if(newTaskId!=UIBackgroundTaskInvalid&&backTaskId!=UIBackgroundTaskInvalid)
{
[[UIApplicationsharedApplication]endBackgroundTask:backTaskId];
}
return newTaskId;
}
新聞熱點
疑難解答