如何开始在iPhone的锁定屏幕播放音乐

时间:2013-03-05 10:58:56

标签: iphone ios objective-c

我正在使用UILocalNotification提醒用户,如果应用未投放,MPMusicPlayerController播放iPod音乐,MPMoviePlayerController播放广播流网址。

根据Apple doc:  如果iPhone被锁定并且设备接收到本地通知,那么它将播放30秒的声音,当用户滑动滑块时,它将占用应用程序前景并发生两种情况

  1. 如果App未运行,则调用方法

    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

  2. 如果App已经运行,则调用方法 -

    (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notify

  3. 我可以用这些方法完成我的任务。

    问题: 我需要我的应用程序能够播放我的声音(它可能是iPod音乐或流媒体网址,但不是本地通知声音30秒),当iPhone被锁定并收到本地通知并且应用程序在前台运行时。

    参考应用: “闹钟高清”和应用程序商店中提供的其他应用程序在这种方式下工作正常,但是当应用程序在后台运行时,这些应用程序无法播放警报(我无法理解为什么???)

    我也试过how-to-prevent-iphone-from-deep-sleeping

    通过定期播放无声音乐来防止iPhone深度睡眠,但如何通知应用通知已收到,所以开始播放“实际音乐”?以及如何开始播放新音乐?

2 个答案:

答案 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