使用AudioServices相关接口(底层c接口)的连续震动实现(ios)

简介:  废话不多说,先上接口 AudioServicesAddSystemSoundCompletion(kSystemSoundID_Vibrate, NULL, NULL, systemAudioCallback, NULL); AudioServicesR...

 废话不多说,先上接口

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,回调方法就歇火了。

优化:

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

[NSObject cancelPreviousPerformRequestsWithTarget:self
                                             selector:@selector(triggerShake)
                                               object:nil];  停止之前可能的回调;这两个方法的成对使用既好用又简便,对于需要定时调用的场景很适合,也免去维护定时器的麻烦。
   

目录
相关文章
|
数据采集 编解码 API
如何实现Android平台GB28181设备对接Camera2数据
在写如何实现Android平台GB28181设备对接Camera2数据说明之前,我在前两年的blog就有针对camera2的RTMP直播推送模块做过技术分享:
如何实现Android平台GB28181设备对接Camera2数据
|
Android开发 开发者
Android平台GB28181设备接入端如何实现本地录像?
实现Android平台GB28181设备接入的时候,有个功能点不可避免,那就是本地录像,实际上,在实现GB28181设备接入模块之前,我们前些年做RTMP推送和轻量级RTSP服务的时候,早已经实现了本地录像功能。
109 0
|
5月前
|
编解码 网络协议 前端开发
如何实现Android平台GB28181设备接入模块按需打开摄像头并回传数据
后台采集摄像头,如果想再进一步扩展,可以把android平台gb28181的camera2 demo,都移植过来,实现功能更强大的国标设备侧,这里主要是展示,收到国标平台侧的回传请求后,才打开摄像头,才开始编码打包,最大限度的减少资源的占用
|
Android开发 开发者
Android平台GB28181设备接入模块之球机/云台控制探究
好多开发者在做GB28181设备接入的时候,问云台控制是否可以处理(亦或拉取外部RTSP摄像头,通过命令中转的方式,控制摄像头),实际上云台控制命令相对来说还是比较好处理的。协议规范有明确说明,云台控制命令不需要发送应答命令,实现相对简单,和我们之前做的远程启动命令(TeleBoot)类似。
171 0
|
编解码 监控 前端开发
如何实现Android平台GB28181前端设备接入
在实现Android平台GB28181前端设备接入之前,我们几年前就有了非常成熟的RTMP推送、RTSP推送和轻量级RTSP服务等模块,特别是RTMP推送,行业内应用非常广泛,好多开发者可能会问,既然有了以上模块,干嘛还要实现GB28181的前端接入呢?
202 0
|
存储 调度 开发者
iOS 子控制器
iOS 子控制器
127 0
|
JavaScript 前端开发 Android开发
iOS 自动适配的 WebView 封装 (下)
iOS 自动适配的 WebView 封装 (下)
196 0
iOS 自动适配的 WebView 封装 (下)
|
缓存 JavaScript 前端开发
iOS 自动适配的 WebView 封装 (上)
iOS 自动适配的 WebView 封装 (上)
856 0
iOS 自动适配的 WebView 封装 (上)
iOS UIActivityIndicatorView(指示控制器)用法总结
iOS UIActivityIndicatorView(指示控制器)用法总结
240 0
|
iOS开发
iOS 获取当前控制器的正确方式
背景 在开发过程中,经常需要获取当前 window, rootViewController, 以及当前 ViewController 的需求. 如果 .m 实现不是在当前视图情况下, 我们需要快速的获取到当前控制器, 这种情况就需要先做好一层封装,我一般是通过 UIViewController 写的一个 Category 来实现, 实现起来也非常简单, 只需要我们对 控制器几个方法掌握便可。
1139 0