小编gab*_*oze的帖子

当应用程序在前台并且屏幕被锁定时播放声音 - iOS

前言:我正在构建一个闹钟应用程序.许多其他警报应用程序(如闹钟专业版)能够在屏幕锁定且应用程序位于前台时播放警报.它们的警报可以无限制地播放,并且可以使用系统音量逐渐增加音量.他们也没有控制音乐控件(如果你打开多任务屏幕并滚动播放音频,你将看不到他们的图标)

我在复制该功能时遇到了一些麻烦.

要在应用程序位于前台时播放警报,我们会触发本地通知,效果很好.屏幕锁定时,我的成功有限(应用程序处于非活动状态)

我使用了以下方法:

  1. NSTimer屏幕锁定时,每秒运行一次后台任务.我设法保持应用程序打开超过10分钟,但我无法播放声音.什么时候到来

  2. 使用播放1秒静音AVAudioPlayer.当声音结束时,重播声音并检查应用程序是否处于非活动(锁定屏幕)状态.如果它处于锁定屏幕状态并且是时候播放闹钟,请播放它.这里的问题是我必须使用

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

为了在后台继续更新歌曲.该方法将在音乐控件中显示Wake,并将停止我们想要避免的任何当前播放的音乐.

  1. #1和#2的组合.当应用程序打开时,无限重复播放无声音.当屏幕被锁定时,触发计时器以检查其是否有时间发出警报.在播放闹钟时,将静音声音切换为闹钟声音.系统最终将强制关闭应用程序

已经帮助但尚未解决我的问题的相关知识:

  1. 如何在静音模式下开始播放音频并在iOS 6中锁定?
  2. iOS 5深度睡眠预防
  3. 应用程序处于后台时,在中断后恢复执行代码
  4. 如何在背景iphone sdk播放音乐

摘要:当屏幕被锁定且应用程序位于前台时,我无法阻止该过程在10分钟后被杀死.

UPDATE

我最终使用了https://github.com/mruegenberg/MMPDeepSleepPreventer,让我在10分钟后播放声音.然而,这就像疯了一样吃掉电池.我需要找到一个更有效的解决方案.

更新2

我从应用程序商店下载了一些http://marcopeluso.com/应用程序.他是Deep Sleep Preventer的创造者.我下载了他的一些应用程序,并进行了一些仪器测试,看到他的应用程序没有像我的应用程序一样耗尽电池(他的博客上某处声称每小时大约2.5%).我非常肯定我需要优化我的应用程序,电池耗尽问题将消失,我的问题将得到解决!

更新3 我最终使用https://github.com/mruegenberg/MMPDeepSleepPreventer

我在它自己独立的xCode项目中运行它,当应用程序在后台时它只使用0.5%的cpu.事实证明这是我的应用程序吸吮CPU.所以它现在运作良好:)

iphone background screen locked ios

19
推荐指数
1
解决办法
5693
查看次数

如何在iOS中以最大音量播放声音文件而不改变声音指示器

在我的应用程序中,我需要播放从0到最大系统音量的声音(这是一个警报应用程序).

我目前AVAudioPlayer用来播放声音并MPMusicPlayerController在闹钟期间最大化设备的音量

MPMusicPlayerController.applicationMusicPlayer.volume = 1.0;


NSString *fileName = [NSString stringWithFormat:alarm.sound];
fileName = [fileName stringByDeletingPathExtension];

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aifc"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
audioPlayer.volume = 0.0;
audioPlayer.numberOfLoops = -1;

[audioPlayer prepareToPlay];

audioPlayer.play;
Run Code Online (Sandbox Code Playgroud)

然后我安排一个计时器来增加音量

timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                         target:self
                                       selector:@selector(pollTimeForGradualVolumeIncrease)
                                       userInfo:nil repeats:YES];
Run Code Online (Sandbox Code Playgroud)

//逐渐增加音量

- (void)pollTimeForGradualVolumeIncrease
{
    timerSecond += 1;

    if (audioPlayer.volume < 1.0 && timerSecond % 1 == 0)
    {
        [audioPlayer setVolume:audioPlayer.volume + 0.02];
        UISlider *slider = volumeSliderView.subviews[0]; …
Run Code Online (Sandbox Code Playgroud)

iphone audio volume max ios

8
推荐指数
1
解决办法
2100
查看次数

标签 统计

ios ×2

iphone ×2

audio ×1

background ×1

locked ×1

max ×1

screen ×1

volume ×1