cod*_*gle 7 java sensor event-listener android-sensors
我正在开发一个应用程序来连接基于蓝牙的多传感器(SensorDrone).它总共包含大约15个传感器,所有这些传感器都可以使用芯片制造商创建的第三方闭源库与Android设备进行通信.
第三方库要求我实现一个自定义Java EventListener,它包含每个传感器的函数,当它的数据准备好使用时会被触发:
DroneEventListener droneEventListener = new DroneEventListener() {
    @Override
    public void temperatureMeasured(EventObject arg0) {
        readTemperatureFromDrone();
    }
    @Override
    public void pressureMeasured(EventObject arg0) { /*...*/ }
// Etc...
    @Override
    public void disconnectEvent(EventObject arg0) {
        // Let the user know the bluetooth connection was lost
    }
    @Override
    public void connectEvent(EventObject arg0) {
        // Let the user know the device was connected
    }
};
Run Code Online (Sandbox Code Playgroud)
但是,我希望与另一个名为funf的库合作,以获取Android内置传感器的信息.该库非常适合收集内置Android传感器和外部传感器的数据.它通过允许您创建自定义" 探测 "实现来实现此目的.但是,探针(通过库和惯例的建议)一次只能用于一个传感器.
所以,我的问题是这个; 有可能以某种方式将DroneEventListener()类细分为特定的传感器吗?之后,我可以轻松地为多传感器上的每个传感器创建自定义探头.
我意识到尝试细分抽象类可能是不好的做法,因为它在概念上是开发人员的合同.但是,我认为让这个代码与预先存在的,可靠且维护良好的库(funf)一起工作的温和黑客将是值得的.
或者,是否有任何其他创造性的解决方案,允许我使用制造商的库与funf?
我已经决定使用"细分"这个词语对我来说很清楚.我本质上意味着当我使用的只有一个时,我不想实现20个空白的方法.所选答案精确地解释了如何做到这一点.
是否可以从EventListener(具有多个函数)实现一个函数而不必实现混乱的空方法?
如果您只想使用一种方法来处理每个事件,您可以创建一个处理重定向的抽象类。
这样,您只需要实现这个方法就可以处理所有事情。
public abstract DroneEventAdapter implements DroneEventListener {
    public abstract void eventOccured(EventObject event);
    @Override
    public void temperatureMeasured(EventObject event) {
        eventOccured(event);
    }
    @Override
    public void pressureMeasured(EventObject event) {
        eventOccured(event);
    }
    @Override
    public void disconnectEvent(EventObject event) {
        eventOccured(event);
    }
    @Override
    public void connectEvent(EventObject event) {
        eventOccured(event);
    }
    // Etc.
}
Run Code Online (Sandbox Code Playgroud)
如果您只需要实现某些事件,而不需要为其他所有事件提供空存根,则可以创建一个使用空方法实现每个事件的抽象类。它称为“适配器”,在 JDK 中非常常见(例如,请参阅MouseMotionListener和MouseMotionAdapter )。
扩展此类时,您将只能覆盖您想要支持的事件。
public abstract DroneEventAdapter implements DroneEventListener {
    @Override
    public void temperatureMeasured(EventObject event) {}
    @Override
    public void pressureMeasured(EventObject event) {}
    @Override
    public void disconnectEvent(EventObject event) {}
    @Override
    public void connectEvent(EventObject event) {}
    // Etc.
}
Run Code Online (Sandbox Code Playgroud)
        |   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1155 次  |  
        
|   最近记录:  |