Android 用于记录传感器数据的按钮
Android button for recording sensor data
我是 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();
}
}
});
}
}
从回调 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
回调的写入行为。所以在你的 class 中定义一个私有字段 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));
}
}
写入文件的代码在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 ;
这将反转布尔值的当前值。
这样一键开始录制,下一键停止
我是 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();
}
}
});
}
}
从回调 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
回调的写入行为。所以在你的 class 中定义一个私有字段 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));
}
}
写入文件的代码在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 ;
这将反转布尔值的当前值。 这样一键开始录制,下一键停止