我正在使用UILocalNotification
提醒用户,如果应用未投放,MPMusicPlayerController
播放iPod音乐,MPMoviePlayerController
播放广播流网址。
根据Apple doc: 如果iPhone被锁定并且设备接收到本地通知,那么它将播放30秒的声音,当用户滑动滑块时,它将占用应用程序前景并发生两种情况
如果App未运行,则调用方法
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
如果App已经运行,则调用方法 -
(void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notify
我可以用这些方法完成我的任务。
问题: 我需要我的应用程序能够播放我的声音(它可能是iPod音乐或流媒体网址,但不是本地通知声音30秒),当iPhone被锁定并收到本地通知并且应用程序在前台运行时。
参考应用: “闹钟高清”和应用程序商店中提供的其他应用程序在这种方式下工作正常,但是当应用程序在后台运行时,这些应用程序无法播放警报(我无法理解为什么???)
我也试过how-to-prevent-iphone-from-deep-sleeping:
通过定期播放无声音乐来防止iPhone深度睡眠,但如何通知应用通知已收到,所以开始播放“实际音乐”?以及如何开始播放新音乐?
答案 0 :(得分:5)
@manju对不起,我迟到了,但它适合你。
selectedDate = [timePicker date];
它是选定日期对象,此时您的通知将会到来
[NSDate date]
这样您就可以找到当前时间。并通过发现不同的时间。
NSTimeInterval timeDifference = [ selectedDate timeIntervalSinceDate:[NSDate date]];
现在,当您安排通知时,请。编写此代码
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask = 0;
NSTimer *backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:timeDifference target:self selector:@selector(backgroundTask) userInfo:nil repeats:NO];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
-(void)backgroundTask
{
NSLog(@"Here you can play song via player ");
}
不要忘记添加app.infolist
UIApplication BackgroundMode Audio 它将解决您的问题,在设备锁定时播放歌曲。
答案 1 :(得分:2)
使用AVAudioSessionCategoryPlayback
进行音频会话。查看音频会话编程指南here