使用 AudioServices 相关接口的连续震动

摘要:本文使用底层接口,实现iOS设备上的连续震动,以及连续播放系统声音(不是音乐播放器哦)

话不多说,先上代码!!!喜欢就点赞

主要功能函数

首先实现上述函数中的回调函数(注意是C)

实现播放声音或震动的代码

至此,就可以顺利的播放声音和震动了,而且是连续的哦!!!

别忘了! 怎么让他停下来

为了方便 我就写了而一个OC的方法来做了

这里要详细解说一下需要注意的事项:

AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, systemAudioCallback, NULL);
AudioServicesRemoveSystemSoundCompletion(kSystemSoundID_Vibrate);
这两个接口的用途是绑定和取消指定soundID对应的回调方法;kSystemSoundID_Vibrate为soundID类型,其回调方法认准的也是这个soundID,在任何地方使用这个id去执行AudioServicesPlaySystemSound(xxxSoundID)都会调用到该回调方法。而一旦调用remove方法取消回调,同样的在任何地方使用这个id去执行AudioServicesPlaySystemSound(xxxSoundID)都不会调用到这个回调。说的这么绕,其实就是说这俩接口的影响是全局的,威力很大。
我们只要在回调方法里面再调用AudioServicesPlaySystemSound接口,就可以实现连续震动了;当我们想要停止震动时,调用remove接口,ok,回调方法就歇火了。

优化:(参考某大神的博客,名字太长,直接附链接)
http://blog.csdn.net/openglnewbee/article/details/8494598

经过测试发现震动之间太连续,体验不符合要求;所以我们在c回调里面通过单例(全局变量性质的指针)调用到oc的方法进行[self performSelector:@selector(triggerShake) withObject:nil afterDelay:1](triggerShake是震动接口);在停止震动时候我们需要调用

停止之前可能的回调;这两个方法的成对使用既好用又简便,对于需要定时调用的场景很适合,也免去维护定时器的麻烦。

这个时候屏幕要是常亮就更好了,不用费脑子了,用这个!!!

同样,别忘了结束的时候置NO,否则就会一直亮着了!!!

附图(建议大家想想一下连续震动的感觉):

11545755-46b76ee471f5956c

效果图

进一步交流 QQ群:361736344

2 1 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部