如何让我的AVPlayer在应用程序在后台播放?
我已经完成了我的功课…一直在这里阅读,文档,谷歌search,stackoverflowing …但仍然没有运气让我的声音棒,当用户使应用程序进入后台。
到目前为止我所做的:将UIBackgroundModes,audio添加到plist文件。
首先这个代码:
radioAudio = [[AVAudioSession alloc] init]; [radioAudio setCategory:AVAudioSessionCategoryPlayback error:nil]; [radioAudio setActive:YES error:nil];
那么这个:
NSString *radioURL = @"http://xxx.xxx.xxx/radio.m3u"; radioPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:radioURL]] retain];
但只要用户点击主页button,我的声音就会消失。
我也发现这个,但没有添加cuase一些我读过的东西说这是不需要的;
newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid) [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; bgTaskId = newTaskId;
现在我不知道该怎么去让我的AVPlayer让广播歌曲,而用户在电话上做其他的东西。 我正在用4.2testingiPhone 4。 build设4.0。
任何人有什么build议我应该做的?
有同样的问题,但find了这个解决scheme..
看这里: https : //devforums.apple.com/message/395049#395049
以上链接的内容:
将APPNAME
replace为您自己的应用程序名称!
我在iOS 4.2.1上
编辑:到目前为止,使用iOS5 + 6 + 7testing版
在APPNAME-Info.plist
添加UIBackgroundModes
,selectApp播放audio
然后将AudioToolBox
框架添加到文件夹框架。
在APPNAMEAppDelegate.h
添加:
#import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h>
所以它看起来像这样:
... #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h> ...
在APPNAMEAppDelegate.m
添加以下内容:
// Set AudioSession NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; /* Pick any one of them */ // 1. Overriding the output audio route //UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; //AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride); // 2. Changing the default output audio route UInt32 doChangeDefaultRoute = 1; AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
进入
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
但在两行之前:
[self.window addSubview:viewController.view]; [self.window makeKeyAndVisible];
build立你的项目,看看是否有任何错误,如果没有,尝试模拟器上的设备insteddebugging,它可以在模拟器上的错误。
希望这可以帮助他人解决同样的问题
帕特里克的回答是完全正确的。
但是我会写我为ios 8.2做的事情:
我添加我的应用程序的info.plist所需的背景模式,如下所示:
在我的AppDelegate.h我添加这些导入:
#import <AVFoundation/AVFoundation.h> #import <AudioToolbox/AudioToolbox.h>
然后在我的AppDelegate.m我写应用程序didFinishLaunchingWithOptionsthis完全如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; return YES; }
即使屏幕locking,现在应用程序仍然在播放音乐:)
我已经成功地使audio在后台运行,通过添加以下内容到我的applicationDidFinishLaunching
// Registers this class as the delegate of the audio session. [[AVAudioSession sharedInstance] setDelegate: self]; // Allow the app sound to continue to play when the screen is locked. [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
iOS 9 Swift
所有你需要的是添加以下到你的didFinishLaunchingWithOptions
do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) } catch { //TODO }
你有一个GPS背景应用程序,即使在后台播放声音很好的例子:
http://www.informit.com/articles/article.aspx?p=1646438&seqNum=5
在这个例子中,使用AudioToolbox。
我做了一个testing我自己,它的工作原理:创build一个简单的项目,监测GPS的post( UIBackgroundModes
location
),每接收到的位置,播放声音
AudioServicesPlaySystemSound(soundId);
然后,如果您将audio
作为UIBackgroundModes
一部分,即使应用程序不在前台,也会播放声音。
我已经做了这样的testing,它工作正常!
(我没有设法使它与AVPlayer,所以我fallbacked到AudioToolbox)
我遇到了同样的问题,我在Apple Docs中find了解决scheme: https : //developer.apple.com/library/ios/qa/qa1668/_index.html
问:我的应用程序在后台使用AV Foundation时,如何确保媒体能够继续播放?
答:您必须声明您的应用在后台播放声音内容,并为您的audio会话分配适当的类别。 另请参阅video媒体的特殊注意事项 。