4

如果应用程序未运行并播放 iPod 音乐和播放无线电流 url,我会使用UILocalNotification它来提醒用户。MPMusicPlayerControllerMPMoviePlayerController

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

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

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

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

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

我可以用这些方法执行我的任务。

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

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

我还尝试 了 how-to-prevent-iphone-from-deep-sleeping

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

4

2 回答 2

5

@manju 抱歉我迟到了,但它对你有用。

 selectedDate = [timePicker date];

是selectedDate日期对象,这个时候你的通知就来了。
[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 它将解决您的问题,在设备锁定时播放歌曲。

于 2013-05-16T11:49:04.043 回答
2

用于AVAudioSessionCategoryPlayback音频会话。在此处查看音频会话编程指南

于 2013-03-05T11:52:52.370 回答