0

我正在尝试注册SensorEventListener,但我的听众类型错误。

这是我尝试过的:

;; listener
(gen-class
:name com.spython.pushupcounter.main.sensor-listener
:implements [android.hardware.SensorEventListener]
:prefix "-"
:methods [[onAccuracyChanged [android.hardware.Sensor Integer] void]
                    [onSensorChanged [android.hardware.SensorEvent] void]])

(def listener com.spython.pushupcounter.main.sensor-listener)
(.registerListener sensor-manager listener proximitySensor 2)

看起来我需要投到listenerSensorEventListener对吧?
我怎样才能做到这一点?

4

1 回答 1

2

与类名匹配的符号,例如com.spython.pushupcounter.main.sensor-listener解析为java.lang.Class. 所以 your listeneris a Class,这不是你想要的。它应该是com.spython.pushupcounter.main.sensor-listener. 可以使用标准实例化语法创建实例(com.spython.pushupcounter.main.sensor-listener.)——注意.末尾的 a——. 的语法糖new。但即使你修复了这个问题,代码也不会工作。(gen-class)使用这种方式很棘手。它仅在使用 AOT 编译时生成类,否则不执行任何操作。您还必须提供SensorEventListener方法的实现。

更好的方法是使用(reify),它返回一个实现所需接口的对象。例如:

(defn listener []
  (reify
    android.hardware.SensorEventListener
    (onAccuracyChanged [_ sensor accuracy] 
      (comment onAccuracyChanged implementation here))
    (onSensorChanged [_ event]
      (comment onSensorChanged implementation here))))

(.registerListener sensor-manager (listener) proximitySensor 2)
于 2014-07-07T02:40:20.983 回答