我是Android平台的初学者。我编写了下面粘贴的代码,用于通过单击按钮记录磁传感器中的数据。但是当我点击按钮(按钮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();
}
}
});
}
}
答案 0 :(得分:2)
写入文件的代码在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 ;
将反转布尔值的当前值。 这样一次点击就会开始记录,下一次点击就会停止记录。
答案 1 :(得分:0)
从回调Button
中删除onSensorChanged
。你不需要那里。例如,在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));
}
}