android 方向传感器Sensor或指南针罗盘研究
目前获取方向角度的方法有两种:
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或指南针罗盘研究相关推荐
- Android方向传感器学习之指南针示例
刚刚跟着视频学习了关于Android中传感器的操作示例,利用方向传感器做了一个很简单的指南针应用...平时工作项目中很少有用到传感器功能,所以很多都不知道,现在自学些,当作慢慢入门吧... 首先贴出软 ...
- Android方向传感器的相关问题
android的方向传感器Sensor.TYPE_ORIENTATION(已过时,实测新方法得到的结果和旧方法一致) 三个值分别表示: value[0] 方向角,用来测方向 value[1] 垂直方向 ...
- Android方向传感器实践——自己动手做指南针
传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器.Android的Sensor系统涉及了Android的各个层次. Android系统支持多种传感器,有 ...
- Android 方向传感器的简单使用
方向传感器基本是Android手机必备功能,所有这个demo基本都可以使用. 界面一个ImageView(蓝色条) 下面是自己画的圆和线(最开始没去找图,懒) <?xml version=&qu ...
- Android 方向传感器与磁力计和加速度传感器之间的关系
一般情况下,在android系统中获取手机的方位信息azimuth似乎是很简单的事情,在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaul ...
- Android -- 传感器使用示例, 用方向传感器做指南针
1. 传感器类型:方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器: Sensor.TYPE_ORIENTATION 加速度(重力)传感器: Sensor.TYPE_ACCE ...
- Android百度地图(二)结合方向传感器我们自己定位哪里走
Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步修改,有 ...
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37730469 在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图 ...
- Android笔记 方向传感器
1传感器概念 图片资源来自传智播客张泽华视频114集 demo 1布局一张图片 网上随便找一张指南针图片 <RelativeLayout xmlns:android="http://s ...
最新文章
- 《电子商务法》实施倒计时,这些执行细则需注意!
- 5加载stm32 keil_快速入门STM32单片机-软件篇
- Android开发工具之Android Studio----版本控制SVN使用(一)
- 用AsyncCtp实现一个简单的EchoServer
- 访问nfs_通过NFS访问编年引擎
- 字符编码、常见字符集解析(ASCII、Unicode、UTF-8、GB2312等)
- Redis的管道pipeline
- Spark: Structured JDBC 方式访问远程的高可用HA的HIVE
- 深入浅出 SpringMVC - 1
- java中Action层、Service层和Dao层的功能区分
- keras画神经网络拓扑结构图
- Markdown表情关键字大全
- Calendar根据输入的年份和周数计算该周的开始日期和结束日期
- VOCs废气处理设备-粤信环保
- 分门别类总结Java中的各种锁,让你彻底记住
- Error: Service is currently being configured by another administrative operation
- Vue子组件的显示与隐藏
- rabbitMq设置多线程并设置线程池消费处理
- 鼠标处显示坐标 html,cesium的鼠标事件(最基础的显示鼠标位置坐标)
- java 随机字母_Java基础之随机生成数字和字母