用于记录传感器数据的安卓按钮



我是安卓平台的初学者。我编写了代码,我粘贴在下面,用于在单击按钮时记录来自磁性传感器的数据。但是当我单击按钮(按钮 ID - btnRecord(时,它只会记录几秒钟的数据,我必须再次单击才能记录更多。如何通过第一次点击开始连续记录数据?提前谢谢你。

@Override
public void onSensorChanged(SensorEvent event) {
    Sensor sensor = event.sensor;
    a= event.values[0];
    b=event.values[1];
    c=event.values[2];
    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));
        Button button2 = (Button) findViewById(R.id.btnRecord);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT ).show();
                try {
                    writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    }
}
编写

文件的代码位于onClick()这仅在您单击按钮时执行,它执行一次。

将调用onSensorChanged(),但onClick()不会再次执行。

你需要制作一个标志(布尔值(,告诉何时存储在文件中,此标志在 onClick()

前任

boolean recording = false;
Button button2 = (Button) findViewById(R.id.btnRecord);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
        recording = true;
        Toast.makeText(getBaseContext(), "Data Recording Started" , Toast.LENGTH_SHORT ).show();
    }
});
@Override
public void onSensorChanged(SensorEvent event) {
    Sensor sensor = event.sensor;
    a= event.values[0];
    b=event.values[1];
    c=event.values[2];
    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));
        if(!recording){
            return;
        }
        try {
            writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

使按钮充当开关(开、关(更改此设置

recording = true;

对此

recording = !recording ;

这将反转布尔值的当前值。这样,单击一下将开始记录,下一次单击将停止它。

从回调onSensorChanged中删除Button。你在那里不需要它。在其他地方定义Button,例如在onCreate()方法中,例如

onCreate()
Button button2 = (Button) findViewById(R.id.btnRecord);
button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   flip = !flip;
            });

布尔字段flip用于控制onSensorChanged回调的写入行为。因此,在您的类中定义一个私有字段flip并像这样使用它

 @Override
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
        a= event.values[0];
        b=event.values[1];
        c=event.values[2];
        if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magnetismx.setText(Float.toString(event.values[0]));
        magnetismy.setText(Float.toString(event.values[1]));
        magnetismz.setText(Float.toString(event.values[2]));
        if(flip) writeToCsv(Float.toString(a), Float.toString(b), Float.toString(c));
    }
}

最新更新