本文主要是介绍android sensor 框架--Java层,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一个简单的注册流程图:
--调用registerListener()函数,实际调用抽象函数registerListenerImpl
--子类SystemSensorManager实现了registerListenerImpl
--如果有sensor事件,则JNI层android_hardware_SensorManager.cpp就调用dispatchSensorEvent()方法发送
--onSensorChanged()处理事件
SensorManager是一个抽象类,应用程序使用/监听Sensor都通过它。
public abstract class SensorManager {//抽象类/** @hide */protected static final String TAG = "SensorManager";...
}
它定义了一些主要的方法,给应用层使用,提供了什么接口?
public boolean registerListener(SensorEventListener listener, Sensor sensor,//提供接口,给应用层注册监听器int samplingPeriodUs, Handler handler) {int delay = getDelay(samplingPeriodUs); return registerListenerImpl(listener, sensor, delay, handler, 0, 0);}public void unregisterListener(SensorEventListener listener) {//提供接口,给应用层卸载监听器if (listener == null) {return;} unregisterListenerImpl(listener, null);}
注册/听器函数registerListener(SensorEventListener,Sensor,int,int)
SensorEventListener是监听器对象,负责接收和处理SensorEvent的事件。Sensor是要监听的sensor,如TYPE_PROXIMITY类型的.
如果Sensor有数据上报,那么SensorEventListener监听器对象就会收到消息,里面的onSensorChanged()函数就负责处理。
public boolean requestTriggerSensor(TriggerEventListener listener, Sensor sensor) {//注册one-shot trigger类sensorreturn requestTriggerSensorImpl(listener, sensor);}public boolean cancelTriggerSensor(TriggerEventListener listener, Sensor sensor) {return cancelTriggerSensorImpl(listener, sensor, true);}
r
equestTriggerSensor/cancelTriggerSensor与上面的registerListener/unregisterListener一样注册/卸载监听器用的,
只不过,监听器收到事件后就自动disable,如果要继续监听,就要在事件处理函数里再次调用requestTriggerSensor。
//抽象方法,由子类实现protected abstract boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,int delayUs, Handler handler, int maxReportLatencyUs, int reservedFlags);protected abstract void unregisterListenerImpl(SensorEventListener listener, Sensor sensor);protected abstract boolean requestTriggerSensorImpl(TriggerEventListener listener,Sensor sensor);protected abstract boolean cancelTriggerSensorI
这篇关于android sensor 框架--Java层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!