关于安卓的方向传感器
高洛峰
高洛峰 2016-11-19 13:15:35
0
1
578

1.新手每天都碰到很多新问题,今天看书,随着书本写了一个方向传感器的小例子,就是想验证一下是否这么用方向传感器,可是写出来以后,Log出来的值都是0,和书本不一样呀,又上网查了一下,貌似没有写错,可就是结果不对呀2.贴上全部代码,求大家指点呀

public class MainActivity extends AppCompatActivity {

private SensorManager sensorManager;
private SensorEventListener listener=new SensorEventListener() {

    float[] magValues=new float[3];
    float[] accValues=new float[3];
    float[] r=new float[9];
    float[] values=new float[3];
    @Override
    public void onSensorChanged(SensorEvent event) {
        if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
            accValues=event.values.clone();
            Log.d("MainActivity","accelerometer");//结果不对,为了调试加入的
        }
        else if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
            magValues=event.values.clone();
            Log.d("MainActivity","magnetic");//结果不对,为了调试加入的
        }
        SensorManager.getRotationMatrix(r,null,accValues,magValues);
        SensorManager.getOrientation(r,values);
        Log.d("MainActivity","values[0]="+Math.toDegrees(values[0]));
    }

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

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    Sensor magneticSensor=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    Sensor accSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
      sensorManager.registerListener(listener,magneticSensor,SensorManager.SENSOR_DELAY_GAME);
    sensorManager.registerListener(listener,accSensor,SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onDestroy() {
    super.onPause();
    if(sensorManager!=null){
        sensorManager.unregisterListener(listener);
    }
}

}

运行结果永远是
D/MainActivity: accelerometer
D/MainActivity: values[0]=0

就是说magnetic永远触发不了

3.测试的是真机,华为手机,系统是安卓5.0的

要疯了,求指点


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(1)
三叔

今天用了androidstudio自带的模拟器运行,模拟手机的晃动,移动,是能得到数值的,就是说上面的程序对于原生系统应该是没有问题的,难道是华为手机有特别规定?

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template