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类sensor
        return 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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值