首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY不工作

TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY不工作
EN

Stack Overflow用户
提问于 2015-02-24 18:50:53
回答 1查看 1.3K关注 0票数 0

我正在做一个项目,其中之一是,我试图获取加速度计的数据,没有重力分量。然而,我似乎无法从虚拟传感器获得更新:“线性加速度”和“重力”。下面是代码:

代码语言:javascript
复制
    public class SensorModule implements SensorEventListener{

    (...)

    public SensorModule(Context context){

        this.context = context;
        sensorManager = (SensorManager) context.getSystemService(context.SENSOR_SERVICE);
        sensorAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorMagneticField = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        sensorLinearAccel = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
        sensorGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
    }

    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {}

    @Override
    public void onSensorChanged(SensorEvent event) {
        switch(event.sensor.getType()){
        case Sensor.TYPE_ACCELEROMETER:
            ((SensorActivity)context).accelX.setText("" + event.values[0]);
            ((SensorActivity)context).accelY.setText("" + event.values[1]);
            ((SensorActivity)context).accelZ.setText("" + event.values[2]);
            break;
        case Sensor.TYPE_MAGNETIC_FIELD:
            ((SensorActivity)context).magneX.setText("" + event.values[0]);
            ((SensorActivity)context).magneY.setText("" + event.values[1]);
            ((SensorActivity)context).magneZ.setText("" + event.values[2]);
            break;
        case Sensor.TYPE_LINEAR_ACCELERATION:
            ((SensorActivity)context).linearX.setText("" + event.values[0]);
            ((SensorActivity)context).linearY.setText("" + event.values[1]);
            ((SensorActivity)context).linearZ.setText("" + event.values[2]);
            break;
        case Sensor.TYPE_GRAVITY:
            ((SensorActivity)context).gravityX.setText("" + event.values[0]);
            ((SensorActivity)context).gravityY.setText("" + event.values[1]);
            ((SensorActivity)context).gravityZ.setText("" + event.values[2]);
        }
    }

    public void registerListeners(){
        sensorManager.registerListener(this, sensorAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, sensorMagneticField, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, sensorLinearAccel, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, sensorGravity, SensorManager.SENSOR_DELAY_NORMAL);
    }

    public void unregisterListeners(){
        sensorManager.unregisterListener(this, sensorAccelerometer);
        sensorManager.unregisterListener(this, sensorMagneticField);
        sensorManager.unregisterListener(this, sensorLinearAccel);
        sensorManager.unregisterListener(this, sensorGravity);
    }

我在活动中注册了侦听器onResume()和取消注册onPause()。我可以从加速度计和磁强计得到更新,但是TYPE_LINEAR_ACCELERATION和TYPE_GRAVITY没有产生任何更新。我知道我的设备有来自getSensorList(Sensor.TYPE_ALL)的虚拟传感器。同样,当我调用getDefaultSensor(.)它对这四个传感器中的每一个都返回非空。我分别为onSensorChanged()方法中的每一种情况干杯,但是线性和重力的情况永远不会出现,这意味着这些更新不会产生。我还尝试了一个更大的延迟(SENSOR_DELAY_UI),以给它更多的时间,但仍然没有骰子。我正在运行Lollipop5.0.1 (API 21)的Nexus 5上进行测试。有人知道线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-25 11:29:39

OK,通过应用第一条工程规则和一般常识,问题得到了解决:)只是一次又一次地关闭它,现在它自动工作了。不过,这有点麻烦,因为这意味着,除了使用超时线程来验证定期更新之外,我无法知道传感器是否正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28703870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档