目前获取方向角度的方法有两种:

1.目前谷歌建议使用SensorManager中Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD

SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);//获取传感器管理

Sensor aSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//加速度传感器

Sensor mSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);//磁力传感器

sm.registerListener(mOrientationSensorEventListener, aSensor,SensorManager.SENSOR_DELAY_UI);//注册传感器监听器

sm.registerListener(mOrientationSensorEventListener, mSensor,SensorManager.SENSOR_DELAY_UI);

private float[] accelerometerValues = new float[3];

private float[] magneticFieldValues = new float[3];

private float[] values = new float[3];

private float[] rotate = new float[9];

private final SensorEventListener mOrientationSensorEventListener = new SensorEventListener() {

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

accelerometerValues = event.values;

}

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

magneticFieldValues = event.values;

}

SensorManager.getRotationMatrix(rotate, null, accelerometerValues,magneticFieldValues);//通过磁力和加速度值计算旋转矩阵,赋值给rotate

SensorManager.getOrientation(rotate, values);//最后通过矩阵数组计算x,y,z方向手机角度,目前我们需要第一个角度x轴的

values[0] = (float) Math.toDegrees(values[0]);

Log.i("test","定位角度是:"+values[0]);//此结果为从北到南顺时针为0-180度,从南-北顺指针-180到0度,其实是弧度运算的,也就是从北顺指针是0-360度

}

};

2.已经不建议使用的SensorManager中Sensor.TYPE_ORIENTATION

SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

Sensor mOrientationSensor = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION).get(0);//获取方向传感器

if (mOrientationSensor != null) {

mSensorManager.registerListener(mOrientationSensorEventListener,mOrientationSensor,SensorManager.SENSOR_DELAY_GAME);//注册方向传感器监听器

}

// 方向传感器变化监听

private SensorEventListener mOrientationSensorEventListener = new SensorEventListener() {

@Override

public void onSensorChanged(SensorEvent event) {

float direction = event.values[mSensorManager.DATA_X]

// Log.i("way", "角度:"+direction);//此角度值为从北顺时针0-360

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

};

以上两种方式目前都可以使用,当手机指向同一方向不在发生变化时,1中返回值会出现小范围不断跳跃,而2则不会,当自定义方向旋转控件(指针)时,想达到平滑效果,请使用2,时隔25毫秒,频繁刷新便可。

android 方向传感器Sensor或指南针罗盘研究相关推荐

  1. Android方向传感器学习之指南针示例

    刚刚跟着视频学习了关于Android中传感器的操作示例,利用方向传感器做了一个很简单的指南针应用...平时工作项目中很少有用到传感器功能,所以很多都不知道,现在自学些,当作慢慢入门吧... 首先贴出软 ...

  2. Android方向传感器的相关问题

    android的方向传感器Sensor.TYPE_ORIENTATION(已过时,实测新方法得到的结果和旧方法一致) 三个值分别表示: value[0] 方向角,用来测方向 value[1] 垂直方向 ...

  3. Android方向传感器实践——自己动手做指南针

    传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器.Android的Sensor系统涉及了Android的各个层次. Android系统支持多种传感器,有 ...

  4. Android 方向传感器的简单使用

    方向传感器基本是Android手机必备功能,所有这个demo基本都可以使用. 界面一个ImageView(蓝色条) 下面是自己画的圆和线(最开始没去找图,懒) <?xml version=&qu ...

  5. Android 方向传感器与磁力计和加速度传感器之间的关系

    一般情况下,在android系统中获取手机的方位信息azimuth似乎是很简单的事情,在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaul ...

  6. Android -- 传感器使用示例, 用方向传感器做指南针

    1. 传感器类型:方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器:   Sensor.TYPE_ORIENTATION 加速度(重力)传感器: Sensor.TYPE_ACCE ...

  7. Android百度地图(二)结合方向传感器我们自己定位哪里走

    Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步修改,有 ...

  8. Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37730469 在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图 ...

  9. Android笔记 方向传感器

    1传感器概念 图片资源来自传智播客张泽华视频114集 demo 1布局一张图片 网上随便找一张指南针图片 <RelativeLayout xmlns:android="http://s ...

最新文章

  1. 《电子商务法》实施倒计时,这些执行细则需注意!
  2. 5加载stm32 keil_快速入门STM32单片机-软件篇
  3. Android开发工具之Android Studio----版本控制SVN使用(一)
  4. 用AsyncCtp实现一个简单的EchoServer
  5. 访问nfs_通过NFS访问编年引擎
  6. 字符编码、常见字符集解析(ASCII、Unicode、UTF-8、GB2312等)
  7. Redis的管道pipeline
  8. Spark: Structured JDBC 方式访问远程的高可用HA的HIVE
  9. 深入浅出 SpringMVC - 1
  10. java中Action层、Service层和Dao层的功能区分
  11. keras画神经网络拓扑结构图
  12. Markdown表情关键字大全
  13. Calendar根据输入的年份和周数计算该周的开始日期和结束日期
  14. VOCs废气处理设备-粤信环保
  15. 分门别类总结Java中的各种锁,让你彻底记住
  16. Error: Service is currently being configured by another administrative operation
  17. Vue子组件的显示与隐藏
  18. rabbitMq设置多线程并设置线程池消费处理
  19. 鼠标处显示坐标 html,cesium的鼠标事件(最基础的显示鼠标位置坐标)
  20. java 随机字母_Java基础之随机生成数字和字母

热门文章

  1. 远程控制阀门和限位开关
  2. 交替性注意力_如何提升专注力
  3. 用esp8266实现远程空调控制(一)
  4. 图文并茂详解STM32时钟配置
  5. 光环国际PMP:项目经理时间管理
  6. JS定时器和清除定时器/JS四
  7. JS实现请假时长计算(计算小时数差)
  8. 能正常运行的Linux名片,DIY达人仅用3美元打造可运行Linux的名片
  9. python输出回车_Python print 如何换行输出?
  10. 一个数可以由哪些数相加得到