不会吧,这也行?iOS后台锁屏监听摇一摇

2020-10-09  本文已影响0人  Dast1Woop

[toc]

背景介绍

一般情况下,出于省电、权限、合理性等因素考虑,给人的感觉是很多奇怪的需求安卓可以实现,但是iOS就无法实现!今天要介绍的需求也有这种感觉,就是“当 APP 处于后台或锁屏状态时,依旧可以监听到摇一摇,进而触发某些功能,比如:语音播报”。

在产品经理提出此需求的一瞬间,仿佛周边的空气都凝固了,我也犹如五雷轰顶,愣在原地无法动弹。不由心想:“苹果爸爸怎么可能允许开发者实现这种功能!这得多费电啊!要是所有 APP 都这么做了,那还了得!” 与此同时,之前网上疯传、远近闻名的的需求--“做一个会根据手机壳颜色而改变主题颜色的APP”,清晰地浮现在脑海中,顿时一万只xx🐎从心中奔腾而过。此时,产品经理解释到,这是咱们好多视力障碍用户提的需求,他们经常锁屏或把 APP 退到后台,且因为视力不佳原因,导致重新找到 APP 并切到前台的操作很是麻烦,所以十分希望我们能实现这个功能。

在短暂的心理活动后,秉着“客户第一,产品🐂🍺”的原则,于是回复说:“这功能太少见了,我先在网上看看吧,要是有其他 APP 有类似的功能,麻烦跟我说我参考一下。”然后,就祭出了程序员利器--Google,输入“iOS 后台 摇一摇”,只搜索出来的一个思路:<u>利用 CoreMotion 框架,监听加速计原始数据,然后在 APP 退到后台后,可以实现监听摇一摇的效果。</u>然而,并没有完整的代码或 demo 。顿时,Talk is cheap, show me the code!这句经典台词突然地出现在脑海中!也看到有人评论说 CoreMotion 的确可以实现跟系统摇一摇类似的效果,但是退到后台或锁屏后,没办法监听到摇一摇事件。

看到这条评论时,我不禁开始怀疑此功能是否真的可以被实现。

玩归玩,闹归闹,开始 code,不开玩笑。

接下来,开始自己的探索之旅。

本文 demo 链接为 OCDailyTests/BackgroundShakeTest,可自行下载,方便运行和验证。

探索过程

其他 APP 有没有类似功能

经过一番 Google,终于找到一款 APP 有类似功能::酷狗音乐 APP,对,就是那个在 PC 端一打开就会大喊 Hello KuGou!的音乐软件对应的 APP,万万没想到,手机 APP 也是这样,一句Hello KuGou!把我吓一跳。按如下步骤,在设置里打开此功能后,后台或锁屏时,摇一摇手机,可实现切歌的效果。

既然的确有 APP 实现了此功能,那就踏踏实实地探索它可能是怎么实现的吧。

系统提供的摇一摇回调能否满足

系统摇一摇回调方法:

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{
    NSLog(@"%s", __FUNCTION__);
}

经测试,此方法只有在 APP 处于前台时,才会被回调。APP 处于后台或锁屏时,此方法不会回调。故<u>初步判定</u>此方法不能满足需求。

其他方法能否实现

此时,还是先根据网上各路大神提供的思路进行尝试,即<u>利用 CoreMotion 框架,监听加速计原始数据,然后在 APP 退到后台后,实现监听摇一摇的效果。</u>

好,我们先<u>利用 CoreMotion 框架,监听加速计原始数据</u>,实现类似系统摇一摇回调的效果。

利用 CoreMotion 框架,监听加速计原始数据

通过加速计监听摇一摇

因加速计回调比较频繁,因此比较占用资源,故把此功能设计为单例。

控制器相关逻辑和代码

APP 申请后台运行权限后,能否监听到摇一摇

因为工作中很多 APP 具有后台定位权限和相关功能,所以本文通过为 APP 申请后台定位权限来验证。

APP 申请后台定位权限

多 APP 都实现此功能时,摇一摇是何效果

这里用 demo APP 和酷狗音乐 APP 进行测试。

后台定位权限 + 系统摇一摇,是否可行?

经测试,还是不行。果然,系统摇一摇还是比较受限的,只能在前台回调。

文章小结

想要实现”iOS后台锁屏监听摇一摇“功能,

首次,必须满足一个硬性条件:APP 具有某种后台运行的权限。

其次,技术实现上必须使用CoreMotion框架,通过监听加速计回调自己实现对摇一摇事件的监听判定

最后,可通过增加时间属性,实现对摇一摇事件监听时的节流效果,防止持续摇动时,太过频繁的事件回调。

此外,多 APP 都实现此功能时,摇一摇的效果是:只要摇动力度很大,加速计数据满足 APP 实现的摇一摇判定条件,就可以同时触发多个 APP 各自对应的效果

因此,如果不是 APP 特别需要此功能,尽量不要这样实现,毕竟,比较占用系统资源,而且太多 APP 同时实现时,可能会出现效果上的相互干扰。不过,如果合理利用此功能,却可以为特殊用户群体提供极大的便利

通过探索,满足了视力障碍用户的迫切需求,还是蛮有成就感的!

偷偷的告诉大家,写到这里时,产品经理还没告诉我他所知道的哪个 APP 实现了这个功能,可能他太忙,给忘记了吧......

参考文章

iOS应用退出到后台后怎样监听摇晃事件

Demo 链接

OCDailyTests/BackgroundShakeTest

最后,感谢“技术创作101训练营”!通过参加训练营,让我对写作有了更深入的认识和更高的心里觉悟。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

上一篇 下一篇

猜你喜欢

热点阅读