加速传感器。加速变化()使应用程序变慢

时间:2013-02-19 20:09:25

标签: android crash accelerometer android-sensors

在我的应用中,我使用AccelerationSensor.accelerationchanged(xAccel,yAccel,zAccel)API 问题是每个o.oooo1在任何轴上的变化都会调用该方法,因此应用变得非常慢,有时甚至变为“无响应”

有没有办法检查整数部分是否已更改并丢弃任何小数变化?

2 个答案:

答案 0 :(得分:1)

当你为传感器注册一个监听器时,它允许你设置一个频率。使用较慢的频率。

答案 1 :(得分:1)

这就是我正在做的事情,在我的onStartCommand()我的服务中

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

这是我正在处理我的数据的功能,它非常轻,但它应该让你知道使用阈值。在我的情况下,我真的只需要知道一下这个设备,在我的情况下,结果看出差值大约需要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];
}