java - 传感器更改不会触发 onSensorChanged

标签 java android android-studio android-sensors

我昨天刚开始使用 android 和 java,但遇到了问题。我正在尝试将传感器的值输出到某些 TextView。文本更新,但使用定义时设置的值。 onSensorChanged 应该更新这些值吗?

import [...]

public class MainActivity extends Activity implements SensorEventListener {

    public float[] gravity = {0,0,0};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView gravxTxtView = (TextView) findViewById(R.id.gravxTxtView);
        final TextView gravyTxtView = (TextView) findViewById(R.id.gravyTxtView);
        final TextView gravzTxtview = (TextView) findViewById(R.id.gravzTxtView);

        final Handler handler = new Handler();
        handler.postDelayed(
                new Runnable() {
            @Override
            public void run() {
                gravxTxtView.setText("Gravity x: " + Float.toString((gravity[0])));
                gravyTxtView.setText("Gravity y: " + Float.toString((gravity[1])));
                gravzTxtview.setText("Gravity z: " + Float.toString((gravity[2])));
            }
        }, 500);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
            gravity[0] = event.values[0];
            gravity[1] = event.values[1];
            gravity[2] = event.values[2];
        }
    }
}

最佳答案

您缺少一些重要的步骤 1.获取传感器管理器实例

SensorManager sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);

2。获取传感器实例

Sensor accel=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

3。将传感器注册到实现 SensorEventListener 的列表器类,在您的情况下,您已在 MainActivity 上实现,因此它将是 this

sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);

现在当某些变化发生时它会调用 onSensorChanged 方法,请告诉我它是否有效

关于java - 传感器更改不会触发 onSensorChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315485/

相关文章:

Java声明

java - 通过在垃圾收集之前使用反射来清理内容,安全地使用 String 作为密码

java - 暴露 GCM SENDER ID 会产生什么后果?

java - JPA/Hibernate - 嵌入属性

java - android 实用地更改设备屏幕分辨率

关闭蓝牙并重新打开后,Android 6.0 将不再连接到 BLE 设备

android - 使用Jenkins构建Gradle项目时出错

android - 操作栏按钮背景

android - 无法在 API 25 (Android 7.1.1) 中找到移动系统镜像

android - Genymotion : Initialize engine : Failed (moments ago)