【问题标题】:how to start to play music in locked screen in iPhone如何在 iPhone 的锁定屏幕中开始播放音乐
【发布时间】:2013-03-05 10:58:56
【问题描述】:

我使用UILocalNotification 在应用程序未运行时提醒用户,MPMusicPlayerController 用于播放 iPod 音乐,MPMoviePlayerController 用于播放无线电流 url。

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

  1. 如果App没有运行则调用方法

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

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

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

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

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

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

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

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

【问题讨论】:

  • @DineshPatel 我知道我可以使用播放器播放音频,即使我正在使用但问题是当屏幕锁定时我无法控制我的应用程序然后如何通知应用程序该通知已收到,因此应用应开始播放音频。
  • 嗨,Manju,您找到解决问题的方法了吗?如果是,请建议我,我该怎么做。

标签: iphone ios objective-c


【解决方案1】:

@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 音频 它将解决您的问题,当设备锁定时播放歌曲。

【讨论】:

  • -(void)backgroundTask 在即使在后台收到通知时也会调用,但我编写了一段代码来使用 AVAudioplayer 播放音频,它开始在前台播放音频但不在后台播放音频。我已经在plist中设置了“必需的后台模式”为“播放音频”
  • 我的代码--(void)backgroundTask { NSLog(@"这里你可以通过播放器播放歌曲"); NSURL *audioFileLocationURL = [[NSBundle mainBundle] URLForResource:@"HeadspinLong" withExtension:@"caf"]; NSError *error=nil; delegate.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL 错误:&error]; [delegate.audioPlayer setNumberOfLoops:-1]; [delegate.audioPlayer prepareToPlay]; [delegate.audioPlayer 播放];在前台打印日志并开始播放音频,但在后台它只显示日志,不播放音频
  • 嗨 Dinesh,我遇到了和 manju 一样的问题,打印日志,但音乐没有在后台启动。
【解决方案2】:

使用AVAudioSessionCategoryPlayback 进行音频会话。查看音频会话编程指南here

【讨论】:

  • 我已经看过这个链接但是不明白如何通知应用程序收到了通知所以开始播放音乐
  • 如何调用(void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notify方法在锁屏不滑动滑块
  • 我以为你的问题是如何在锁定屏幕中播放音乐?
  • 我是 iOS 的新手抱歉无法澄清我的问题,实际上我想在应用程序在前台运行并且 iphone 像警报一样被锁定时在接收 UILocalNotification 时播放音乐(来自 ipod 库和流 url)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2023-04-08
  • 1970-01-01
  • 2023-03-07
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多