ios本地通知的音频播放时间不能超过多长时间
1个回答
推荐于2016-10-20 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517199
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
当播放音频的应用程序退回到后台时候,一般情况下只有5到10秒钟时间可以继续运行,超过这段时间,应用程序会被系统在后台挂起,但是如果要在后台播放更长时间,那么需要配置一下和在主程序代理中调用回调方法处理相关事件。
首先要修改配置文件,在Info.plist文件中,添加UIBackGroundModes,可以添加包括aduio在后台播放音频和视频里的声音,location保持当前用户的位置信息,voip使用网络电话。添加以上字段是为了通知系统框架,在应用程序进入后台时候请求在后台继续播放一段时间,具体播放多久,根据UIBackGroundTask去申请一段时间。还可以使用本地通知,预先设定local notification来让应用程序在后台运行。
// 设置音频在后台播放
AVAudioSession *audionSession = [AVAudioSession sharedInstance];
[audionSession setCategory:AVAudioSessionCategoryPlayback error:&error];
[audionSession setActive:YES error:&error];
//播放音频
NSString *pathUrl = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"mp3"];
if (pathUrl) {
NSURL *fileUrl = [[NSURL alloc] initFileURLWithPath:pathUrl];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:NULL];
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
audioPlayer.volume = 0.8;
audioPlayer.numberOfLoops = -1;
[audioPlayer pause];
}
在主代理回调中,处理进入后台时候继续播放
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//开启一个后台标示任务
UIApplication *app = [UIApplication sharedApplication];
taskIdentifiery = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:taskIdentifiery];
//标示一个后台任务请求
taskIdentifiery = UIBackgroundTaskInvalid;
}];
//开启一个线程队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[app endBackgroundTask:taskIdentifiery];
taskIdentifiery = UIBackgroundTaskInvalid;
});
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
首先要修改配置文件,在Info.plist文件中,添加UIBackGroundModes,可以添加包括aduio在后台播放音频和视频里的声音,location保持当前用户的位置信息,voip使用网络电话。添加以上字段是为了通知系统框架,在应用程序进入后台时候请求在后台继续播放一段时间,具体播放多久,根据UIBackGroundTask去申请一段时间。还可以使用本地通知,预先设定local notification来让应用程序在后台运行。
// 设置音频在后台播放
AVAudioSession *audionSession = [AVAudioSession sharedInstance];
[audionSession setCategory:AVAudioSessionCategoryPlayback error:&error];
[audionSession setActive:YES error:&error];
//播放音频
NSString *pathUrl = [[NSBundle mainBundle] pathForResource:@"style" ofType:@"mp3"];
if (pathUrl) {
NSURL *fileUrl = [[NSURL alloc] initFileURLWithPath:pathUrl];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:NULL];
audioPlayer.delegate = self;
[audioPlayer prepareToPlay];
audioPlayer.volume = 0.8;
audioPlayer.numberOfLoops = -1;
[audioPlayer pause];
}
在主代理回调中,处理进入后台时候继续播放
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//开启一个后台标示任务
UIApplication *app = [UIApplication sharedApplication];
taskIdentifiery = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:taskIdentifiery];
//标示一个后台任务请求
taskIdentifiery = UIBackgroundTaskInvalid;
}];
//开启一个线程队列
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[app endBackgroundTask:taskIdentifiery];
taskIdentifiery = UIBackgroundTaskInvalid;
});
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询