在点击按钮后获取传感器数据x秒

时间:2011-12-14 14:48:34

标签: android onclick android-sensors

我还在学习Android开发,很抱歉,如果这个问题看起来很愚蠢,但我只想在有限时间内通过手机获取加速计数据。目标是在点击按钮后,传感器的x坐标值仅记录约3秒钟。

public class AccelerometerTestingActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;
    float x_event[];
    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
        // add listener. The listener will be HelloAndroid (this) class
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_GAME);

    }

    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }

    public void onSensorChanged(SensorEvent event){

        // check sensor type
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

            // assign directions
            float x=event.values[0];
            x_event=addArrayElement(x_event,x);
        }
    }

    private float[] addArrayElement(float[] currentArray, float x) {
        // TODO Auto-generated method stub
        float newArray[] = new float[currentArray.length+1];
        int i= 0;

        for(i=0;i<currentArray.length;i++)
        {
            newArray[i] = currentArray[i];
        }

        newArray[i+1]=x;

        return newArray;
    }

因此x_event是一个数组,每个SENSOR_DELAY_GAME周期性地填充加速度计的X位置。

问题是,此代码在活动运行时记录所有值。

我想要的是这个数组只能从单击一个按钮时填充,并且只填充x秒(尚未确定x的值)。之后,数组将被传递给另一个函数进行分析。

我只是不明白如何及时限制听众。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是一个快速的解决方案; 在您注册听众后的onCreate()中,您可以这样做:

    final SensorEventListener listener = this;
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            sensorManager.unregisterListener(listener);
        }
    }, theTimeInMilliseconds);

您还应该考虑使用列表而不是数组来保存您的值,因此您不必在每次获得新值时重新创建它:

ArrayList<Float> xEvent = new ArrayList<Float>();

并添加项目:

xEvent.add(event.values[0]);

答案 1 :(得分:0)

您是否考虑使用定时器,在延迟3秒后, - 取消注册监听器 - 调用您的分析功能 ?

答案 2 :(得分:0)

解决了问题

只需使用Timer类方法每1秒做一次

df.groupby('Company').head(1)
Out: 
  Company Country
0     ABC     USA
2     BCD     USA

我认为更好的解决方案