在 iOS 6 中,如何在静音模式和锁定状态下开始播放音频?

2023-12-03

最终用户流程

  1. Open app
  2. 打开“静音模式”。
  3. 按“锁定按钮”
  4. 应用程序仍然可以在几小时后开始播放声音,而不是在此期间播放任何音频。

执行此操作的应用程序

许多警报应用程序都设法做到这一点,我认为他们没有使用静音音频来保持应用程序运行,因为如果您实际上通过主页退出应用程序,它们不会发出声音。

  • 闹钟专业版
  • My Clock
  • 波浪报警
  • Alarmed
  • iHome
  • ...

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

当前实施的方法

AVAudioPlayer 使用:

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

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof(sessionCategory),&sessionCategory);

并将 Info.plist 设置为:

所需的背景模式(UIBackGroundModes) - 应用程序播放音频(音频)

现在

当应用程序运行并在屏幕上时,即使在静音状态下,我也可以播放音频。如果音频已经在运行,则可以使用主页按钮关闭应用程序,然后音频将运行。但是,如果应用程序不播放音频,并且屏幕被锁定,则所有线程都会被终止,并且永远不会播放音频。这些应用程序如何设法解决这个问题?

迄今为止发现的可能方法

A. 使用“beginBackgroundTaskWithExpirationHandler:”和无限循环来保持应用程序无限期运行。

Pros:

  • 看起来您可以在很多情况下实现此功能,即使用户按下 Home 键也是如此。

Cons:

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

评论:

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

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

B. 使用静音音频循环充当连续音频播放的媒体中心

Pros:

  • 锁定时可以工作,并且在大多数情况下都能保持运行。

Cons:

  • 如果被另一个媒体中心或其他一些情况中断,可能会失败。
  • 也可能违反苹果政策。

评论:

这可以在很多情况下工作,但到目前为止并不理想。正如我再次所说,必须有另一种未记录的方法。

迄今为止的结论

对列出的应用程序进行测试表明它们没有使用我刚才描述的两种方法中的任何一种。方法“A”似乎更接近,但如果实施,其行为将不会像这些应用程序的行为那样。

我使用苹果开发者票证来获取更多信息,我也会通过这些方式发布任何新发现。

谢谢

感谢您的任何见解以及迄今为止您的参与。


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

即 1) 将所需的背景模式设置为应用程序播放音频

2) 将应用程序不在后台运行设置为是。

 NSError *setCategoryErr = nil;
    NSError *activationErr  = nil;
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
    [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS 6 中,如何在静音模式和锁定状态下开始播放音频? 的相关文章

随机推荐

  • 使用 HTML,如何将文件作为 Excel 文件打开?

    我有一个名为new xls我已经保存在 html格式为new html 我已经删除了扩展名 因此文件名只是new 现在如果我将文件重命名为new xls 对于以下代码
  • java.util.zip.ZipException:重复条目:android/support/v4/view/MotionEventCompatEclair.class

    我是 android studio 的新手 正在尝试从 eclipse 导入一个项目 但我觉得我遇到了所有可能的问题 我目前收到的错误是 Error Execution failed for task jobFlexwithInvoice
  • 将TextureView上显示的帧录制为mp4

    我设法编写了一个在TextureView上显示3D模型的演示 并且该模型可以根据手机的传感器移动 3D引擎是用C 编写的 我需要做的就是将TextureView的SurfaceTexture给3D引擎 引擎调用函数 ANativeWindo
  • 使用 python azure 函数从 azure blob 存储读取文件

    我创建了一个天蓝色函数Python 3 9我将使用执行该功能Http Trigger via Azure data factory 现在 在我的 python azure 函数中 我想从我的存储帐户访问存储容器并从同一容器读取文件 以便对文
  • Rails 创建连接表不需要在迁移中添加主键?

    我使用这个命令 rails g migration CreateJoinTableUserPloy user ploy 我检查了迁移文件 create join table Users Posts do t t index user id
  • 如何使用 jQuery Tablesorter 对包含两个 div 的列进行排序?

    我在用着jQuery 表排序器对表进行排序 我的其中一篇专栏如下所示 td div span class green Yes span a href unverify a div div class hidden span class re
  • Gson:java.lang.StackOverflowError: null

    我有一个类Delete 我想使用Gson库将其转换为json 但是当我转换它时 它会抛出异常java lang StackOverflowError null这是我的课 import models UserNotifications Mai
  • 了解上周有多少用户连接到我的计算机,以及每个用户连接了多少次

    我需要一个脚本来显示上周连接到我的计算机的用户及其频率的摘要 我知道我可以使用last并过滤时间列awk 但是如何呢 我必须让每个用户在上周连接并计算连接数加上所有连接的总时间 这是我到目前为止所想出的 for USER in last a
  • 一个有趣的图形任务

    一棵树有n个顶点 我们被要求计算多重集 S 的最小大小 使得树中的每条边 u v 至少满足以下条件之一 你 in S v S S 中至少有两个顶点 每个顶点都与 u 或 v 相邻 由于 S 是多重集 因此一个顶点可能多次出现在 S 中 我的
  • 我如何检查哪些所有用户都登录到我的应用程序

    我有一个基于网络的应用程序 它使用用户名和密码进行登录 现在我如何检查所有用户在该时间登录的特定时间 我正在使用会话管理 并且应用程序中没有使用数据库 所有内容都在文件系统上 编辑 1个更愚蠢的疑问 如何定义具有应用程序范围的变量 是这样的
  • 带 bo​​ost 的类型列表

    在我继续之前 boost 中是否已经有一个类型列表实现或使用它的小型实现 到目前为止我还没有发现任何有用的东西 我正在尝试使用 boost pp 生成各种大小的列表类 define BOOST PP LOCAL MACRO n templa
  • JSP:制作可重用的代码(标签、宏)并在同一页面上使用

    有没有办法在一个 JSP 页面上制作某种参数化宏 并在同一页面上重复使用它几次 可以使用 JSP 标签 但我必须为每个标签创建一个文件 多年来我一直想要这个功能 在再次谷歌搜索后 我编写了自己的功能 我认为标签 jsp 文件和自定义标签类很
  • mdOption 的 (onSelectChange) 输出始终传递列表中的第一项

    我正在使用 Angular 4 4 3 4 的 Angular Material 我需要挂钩选择事件以清除输入并将对象存储在单独的列表中 但有一个问题 onSelectChange 输出始终获取第一项作为参数 这是怎么回事 这是我的模板
  • 使用数据框中的另一列标记 x 轴

    我有一个从运行 GWAS 的输出得出的数据帧 每行都是基因组中的一个 SNP 及其染色体 位置和 P 值 从这个数据框中 我想生成一个曼哈顿图 其中 x 轴从 Chr 1 上的第一个 SNP 到 Chr 5 上的最后一个 SNP y 轴是
  • 如何在 selenium C# 中启用 Chromium Edge 浏览器中的 IE 模式?

    我想在 Edge 中自动化一个需要启用 IE 模式的网站 如何在selenium中以IE模式启动Edge 我当前使用的以下代码在非 IE 模式下启动 Edge 这将无法正确显示网站 Dim edgeDriverService Microso
  • Java 8 中强可达对象上的 Finalize() 调用

    我们最近将消息处理应用程序从 Java 7 升级到 Java 8 自升级以来 我们偶尔会遇到一个异常 即流在读取时已关闭 日志显示终结器线程正在调用finalize 在保存流的对象上 进而关闭流 代码的基本轮廓如下 MIMEWriter w
  • 我无法在 Swift iOS 中创建 UIResponder nextResponder

    我有一个类 ASTextField 它在 UITextField 之后扩展 我想定义 textFieldResponder 有什么解决方案可以在 Swift 中写在下面一行吗 UIResponder nextResponder textFi
  • Switch Case 和 if else if 哪个更快更好?

    哪种方法更好 最快 if 或switch if x 1 echo hi else if x 2 echo bye switch x case 1 break default 你的第一个例子是完全错误的 你需要elseif而不仅仅是else
  • 直接在 JavaScript 中上传 S3

    我正在尝试完成简单的操作 并直接用 JavaScript 上传到 Amazon S3 我如何以及在哪里隐藏我的访问密钥和秘密密钥 我在他们的文档或本网站上没有看到任何可以回答这个问题的内容 我正在使用他们推荐的方法在 HTML 中进行设置
  • 在 iOS 6 中,如何在静音模式和锁定状态下开始播放音频?

    最终用户流程 Open app 打开 静音模式 按 锁定按钮 应用程序仍然可以在几小时后开始播放声音 而不是在此期间播放任何音频 执行此操作的应用程序 许多警报应用程序都设法做到这一点 我认为他们没有使用静音音频来保持应用程序运行 因为如果