在另一种方法中使用onSensorChanged()中的值

时间:2018-12-22 09:55:55

标签: java android void android-sensors

我需要在另一种方法中使用传感器的值。我不知道如何从onSensorChanged()方法获取值。

我尝试创建一个全局字段,在其中写入传感器值,但是在onSensorChanged()方法之外,该字段为null。   我已经在onSensorChanged()事件的textView中显示了传感器值,并且它在这里起作用。显示的值不为空。   当我尝试显示来自onSensorChanged()之外的传感器的数据时,在onCreate事件的textView中,显示的数据为空。

//类级别的全局变量

 float mean_acc;

// onSensorChanged()方法

 public void onSensorChanged(SensorEvent sensorEvent) {
    mean_acc = sensorEvent.values[1];
 }




public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    Log.d(TAG, "onCreate: Initializing Sensor Services");
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);      
    Log.d(TAG, "onCreate:Registered");

    accelView = (TextView) findViewById(R.id.accelDataView);
    accelView.setText(String.valueOf(mean_acc));
}

我找不到问题所在。你能帮我吗?

1 个答案:

答案 0 :(得分:1)

根据您的编码,您拥有方法onCreate,该方法在创建活动时被调用一次,之后将不再被调用。因此,在调用onSensorChanged方法时,您需要在该方法内设置文本,在这里您将获得mean_acc值,这意味着您需要在onSensorChanged方法内设置文本。因此您的代码将是:

public void onSensorChanged(SensorEvent sensorEvent) {
    mean_acc = sensorEvent.values[1];
    accelView.setText(String.valueOf(mean_acc));
}

无论您在何处使用此传感器,此方法都会在每次更改时通知。