这是我的代码的一部分:
public class MyActivity extends Activity implements SensorEventListener,
View.OnClickListener, DialogInterface.OnClickListener {
SensorManager sm;
TextView gravitySensor;
Sensor gravSensor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
gravSensor=sm.getDefaultSensor(Sensor.TYPE_GRAVITY);
gravitySensor=(TextView)findViewById(R.id.gravity);
sm.registerListener(this, gravSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
gravitySensor.setText("X: "+sensorEvent.values[0]+
"\nY: "+sensorEvent.values[1]+
"\nZ: "+sensorEvent.values[2]);
}
传感器的输出转换为文本,并在应用中显示为X,Y,Z值。
我想使用Z值 - 所以当Z低于9.5时,文本(例如通过Toast
文本)出现并通知用户,Z值已更改。
是否可以轻松实现这一目标?谢谢你的帮助!
答案 0 :(得分:1)
你为什么不在这里做:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
gravitySensor.setText("X: "+sensorEvent.values[0]+
"\nY: "+sensorEvent.values[1]+
"\nZ: "+sensorEvent.values[2]);
if(sensorEvent.values[2] > 9.5) {
Toast.makeText(this, "Z value changed", Toast.LENGTH_SHORT).show();
}
}
我没有看到任何问题。
避免多重触发:
boolean isChanged = false;
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
gravitySensor.setText("X: "+sensorEvent.values[0]+
"\nY: "+sensorEvent.values[1]+
"\nZ: "+sensorEvent.values[2]);
if(sensorEvent.values[2] > 9.5 && !isChanged) {
Toast.makeText(this, "Z value changed", Toast.LENGTH_SHORT).show();
isChanged = true;
} else /* if (something more clever)*/ {
isChanged = false;
}
}