我有一个为 Cordova 应用编写的 Android 后台服务,我想通过 sensorManager 与加速度计进行交互。
我觉得我已经很接近了,但还差一点。
由于某些原因,sensorManager.registerListener 似乎无法触发 onSensorChanged 方法 - 我正在从 MyService(我的后台服务类)每5秒检查一次 X 值。
根据我所读的,这与需要对 registerListener 进行处理有关,但我不确定是什么或如何处理。
以下是我的代码(为了可读性而缩减):
我觉得我已经很接近了,但还差一点。
由于某些原因,sensorManager.registerListener 似乎无法触发 onSensorChanged 方法 - 我正在从 MyService(我的后台服务类)每5秒检查一次 X 值。
根据我所读的,这与需要对 registerListener 进行处理有关,但我不确定是什么或如何处理。
以下是我的代码(为了可读性而缩减):
class AccelListener implements SensorEventListener
{
public AccelListener(Context ctx) {
mCtx = ctx;
sensorManager = (SensorManager) mCtx.getSystemService(Context.SENSOR_SERVICE);
}
public int start() {
List<Sensor> list = this.sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
if ((list != null) && (list.size() > 0)) {
this.mSensor = list.get(0);
this.sensorManager.registerListener(this, this.mSensor, SensorManager.SENSOR_DELAY_UI);
}
return this.status;
}
public void onSensorChanged(SensorEvent event) {
if (this.accuracy >= SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM) {
this.timestamp = System.currentTimeMillis();
this.x = event.values[0];
this.y = event.values[1];
this.z = event.values[2];
}
}
}
public class MyService extends BackgroundService
{
protected JSONObject doWork() {
JSONObject result = new JSONObject();
Context thisContext = getApplicationContext();
AccelListener objAccel = new AccelListener(thisContext);
int intAccelReturn = objAccel.start();
setInterval(function()
{
result.put("OUTPUT", objAccel.x);
},5000);
}
非常感谢您的帮助。
谢谢。
O.