重力传感器&与价值变化合作

时间:2014-12-13 19:54:48

标签: java android

这是我的代码的一部分:

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值已更改。 是否可以轻松实现这一目标?谢谢你的帮助!

This is what I want

1 个答案:

答案 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;
    }
}