关于安卓的方向传感器
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的
要疯了,求指点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
今天用了androidstudio自带的模拟器运行,模拟手机的晃动,移动,是能得到数值的,就是说上面的程序对于原生系统应该是没有问题的,难道是华为手机有特别规定?