android sensor 框架--Java层

本文介绍了Android Sensor框架的Java层工作原理,包括SensorManager的使用、SensorEventListener接口的实现、传感器事件的处理流程,以及如何注册和监听Sensor。特别讨论了SensorManager的registerListener()函数、SensorEvent事件的派发机制,以及Sensor对象的创建和管理。
摘要由CSDN通过智能技术生成

一个简单的注册流程图:

--调用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值