2013-02-19 76 views
0

在我的应用程序中,我使用AccelerationSensor.accelerationchanged(xAccel,yAccel,zAccel)API 问题是该方法被调用每个o.oooo1在任何轴上发生更改,因此应用程序变为非常缓慢,有时甚至变成“不响应”AccelerationSensor.accelerationchanged()使应用程序缓慢

有没有办法检查整数部分是否已经改变,并让任何十进制变化?

+0

您使用的是什么传感器轮询间隔? – draksia 2013-02-19 20:12:06

+0

传感器轮询时间间隔:400 – mabdrabo 2013-02-19 20:14:33

回答

1

这是我在做什么,我在我的服务

mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 

这是我处理我的数据的功能,它重量很轻,但它应该使用阈值给你一个想法的onStartCommand()。在我的情况下,我真的只需要了解一下设备,在我的情况下,它发现差异值约为1.75G,但对您而言可能会有所不同。

@Override 
public void onSensorChanged(SensorEvent event) { 


    if(last[0] == 0.0f && 
     last[1] == 0.0f && 
     last[2] == 0.0f){ 

     last[0] = event.values[0]; 
     last[1] = event.values[1]; 
     last[2] = event.values[2]; 

     return; 
    } 

    float diff = 0f; 

    if(Math.abs(last[0] - event.values[0]) > differenceValue || 
     Math.abs(last[1] - event.values[1]) > differenceValue || 
      Math.abs(last[2] - event.values[2]) > differenceValue){ 

     Log.d(TAG,"G values are "+event.values[0]+" "+event.values[1]+" "+event.values[2]); 
     Log.d(TAG,"Last G values are "+last[0]+" "+last[1]+" "+last[2]); 



     diff = Math.abs(last[0] - event.values[0]); 

     if(diff < Math.abs(last[1] - event.values[1])){ 
      diff = Math.abs(last[1] - event.values[1]); 
     } 

     if(diff < Math.abs(last[2] - event.values[2])){ 
      diff = Math.abs(last[2] - event.values[2]); 
     } 

     Log.d(TAG,"Sensor difference: "+diff); 

     //Do what ever processing you need here 

    } 

    last[0] = event.values[0]; 
    last[1] = event.values[1]; 
    last[2] = event.values[2]; 
} 
+0

它的工作,非常感谢:-) – mabdrabo 2013-02-19 20:38:23

1

当您为传感器注册侦听器时,它允许您设置频率。使用较慢的频率。

+0

此外,您可能希望有一个阈值,如果差异较小,只是返回并且不要处理这些值。 – draksia 2013-02-19 20:12:58

+0

仍然没有用,我从400到700 – mabdrabo 2013-02-19 20:15:32

+0

然后门槛是要走的路,正如draksia建议的那样。你必须做一些重大的处理,以使应用程序无响应。也许你应该启动一个线程来做实际的计算。 – 2013-02-19 20:17:29