如何在静音模式下开始播放音频并在iOS 6中锁定?

And*_*lla 46 iphone background silent avaudioplayer ios

最终用户流程

  1. 打开应用
  2. 打开"静音模式".
  3. 按"锁定按钮"
  4. 应用程序仍然可以在数小时后播放声音,而不是在过渡期间播放任何音频.

执行此操作的应用

许多报警应用程序都设法做到这一点我不认为他们正在使用静音音频来保持应用程序运行,因为如果你真的退出家用应用程序它们不会发出声音.

  • 闹钟专业版
  • 我的时钟
  • 波浪报警
  • 惊慌
  • 的iHome
  • ...

...他们是否在锁定某些通知(无法以静音播放声音)之后保持循环运行,启动应用程序备份以播放音频或其他方法?

实施的当前方法

AVAudioPlayer使用:

AudioSessionInitialize(nil, nil, nil, nil);
AudioSessionSetActive(YES);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);
Run Code Online (Sandbox Code Playgroud)

并将Info.plist设置为:

所需的后台模式(UIBackGroundModes) - 应用播放音频(音频)

现在

即使在应用程序运行和屏幕上的静音中,我也可以播放音频.如果音频已在运行,则可以使用主页按钮关闭应用程序并运行音频.但是,如果应用程序没有播放音频,并且屏幕被锁定,则所有线程都将被终止并且音频永远不会播放.这些应用程序如何解决这个问题?

迄今为止找到的可能方法

A.使用'beginBackgroundTaskWithExpirationHandler:'使用无限循环来保持应用程序无限期运行.

优点:

  • 看起来你可以在很多情况下使这项工作,即使用户按下回家.

缺点:

  • 据我所知,这违反了苹果的政策.
  • 将使用更多的资源

评论:

我几乎已经开始工作了,可能需要一些调整.这似乎不是所有这些其他警报正在做的事情,因为如果你按回家BTN他们不会继续运行.这表明他们使用了一些方法,允许他们在锁定时运行但不在BG中运行.(这就是我需要的)

此外,当你问你剩下多少时间跑步时,你会得到大约10分钟.通过在那里放置一个无限循环,数字实际上会降低到0,然后进入负数几个小时.(测试)我不确定这将在现实世界中或在应用程序接受方面如何表现.

B.使用静音音频循环构成连续音频播放媒体中心

优点:

  • 锁定后工作,并在大多数情况下继续运行.

缺点:

  • 如果被其他媒体中心和其他一些场合打断,可能会失败.
  • 也可以再去苹果政策.

评论:

这可以在很多情况下起作用,但到目前为止还不理想.而且就像我再说一遍,必须有另一种没有记录的方法.

迄今为止的结论

使用列出的APP进行测试表明他们没有使用我刚才描述的两种方法中的任何一种.方法'A'似乎更接近,但如果实施则不会表现出这些应用程序的行为方式.

我使用苹果开发者票来获取更多信息,我也会发布任何新的发现.

谢谢

我们非常感谢您的参与,并感谢您的参与.

小智 15

您需要在plist文件中进行一些更改.

即1)将所需的背景模式设置为App播放音频

2)设置应用程序不在后台运行到YES.

 NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
    [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
Run Code Online (Sandbox Code Playgroud)

然后,您需要在AppDelege中编写这么多代码

现在,您可以在手机屏幕锁定或后台轻松运行音频.

  • 我不明白这是否解决了这个问题?答案说它可以在后台播放,但你说它仍然不是解决方案,因为你"需要在后台运行音频".澄清请:). (2认同)

Mar*_*off 5

如果你以前在你的应用程序中这样做:

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
    AudioSessionSetActive(true);

    // Allow playback even if Ring/Silent switch is on mute
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                             sizeof(sessionCategory),&sessionCategory);
Run Code Online (Sandbox Code Playgroud)

我有一个用户告诉我,音频不适用于应用程序(在iOS5之前!).原来他们的铃声/静音开关设置为"静音".所以我添加了这段代码,它会导致"静音"设置被覆盖.例如,如果您有音乐应用程序,并且希望音乐继续播放,则此功能非常有用.