我是安卓平台的初学者。我编写了代码,我粘贴在下面,用于在单击按钮时记录来自磁性传感器的数据。但是当我单击按钮(按钮 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));
}
}