//初始化
public static void init(Context context) {sensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);//已弃用sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);/*查看手机所有传感器类型List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);for (Sensor s : sensorList){System.out.println(s.getName());}*/Sensoreventlistener ll = new Sensoreventlistener();sensorManager.registerListener(ll, sensor, SensorManager.SENSOR_DELAY_NORMAL);//注册加速度传感器监听Sensor acceleSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(ll, acceleSensor, SensorManager.SENSOR_DELAY_NORMAL);//注册磁场传感器监听Sensor magSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);sensorManager.registerListener(ll, magSensor, SensorManager.SENSOR_DELAY_NORMAL);}
//事件监听
//加速度参数与磁场参数static private float[] gravity = null;static private float[] geomagnetic = null;static private long lastrefresh = System.currentTimeMillis();static class Sensoreventlistener implements SensorEventListener {@Overridepublic void onSensorChanged(SensorEvent sensorEvent) {if (System.currentTimeMillis() - lastrefresh > 10) {lastrefresh = System.currentTimeMillis();try {switch (sensorEvent.sensor.getType()) {case Sensor.TYPE_ACCELEROMETER: //加速度传感器gravity = sensorEvent.values.clone();break;case Sensor.TYPE_MAGNETIC_FIELD://磁场传感器geomagnetic = sensorEvent.values.clone();break;}//计算-方位角、俯仰角与翻滚角if (gravity != null && geomagnetic != null) {//方位角、俯仰角与翻滚角float[] values = new float[3];float[] R = new float[9];if (SensorManager.getRotationMatrix(R, null, gravity, geomagnetic)) {SensorManager.getOrientation(R, values);//横屏currentDegreeLandscape = (float) ((360f + values[0] * 180f / Math.PI) % 360);//右上横屏currentDegreeLandscape = (currentDegreeLandscape + 90) % 360;//右下横屏if (values[2] > 0) {currentDegreeLandscape = (currentDegreeLandscape + 180) % 360;}//竖屏currentDegreePortrait = (float) ((360f + values[0] * 180f / Math.PI) % 360);//判断是否有翻转//取绝对值float v2 = (values[2] < 0) ? -values[2] : values[2];if (v2 > Math.PI / 2) {currentDegreePortrait = (currentDegreePortrait + 180) % 360;}System.out.println(values[2]);}}for (int i = 0; i < listChange.size(); i++) {if (listChange.get(i) != null) {listChange.get(i).change();}}} catch (Exception ex) {System.out.println(ex.toString());}}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}

//方位角--屏幕超下时,依然会这样定位数据,所以如果仰视角拍摄就可以会出现方向翻转

值域:-π~π

//俯仰角

围绕以上图的东西方向轴进行转动,屏幕上方部分上翘为负,下方部分上翘为正,水平时为:0

屏幕上方部分在上垂直时:π/2,屏幕上方部分在上垂直时:-π/2,即值域为:-π/2~π/2,超过时会计算为翻转角

//滚转角

围绕以上图的南北方向轴转动,左侧向上为正,右侧向下为负,水平时为:0

屏幕左方部分向上垂直时:π/2,屏幕右方部分向上垂直时:-π/2,屏幕面水平向下时为π或者-π。

即值域为:-π~π

android 陀螺仪相关推荐

  1. android 陀螺仪源码,陀螺仪源码 android

    发表于 2015-12-03 07:47:55 by 月小升 package com.toplus.speedtest; import java.util.Locale; import com.top ...

  2. android陀螺仪测试工具,修改安卓陀螺仪和加速度计的sensor抽象层HAL

    项目具体需求 硬件平台:全志A31 SOC,512RAM,2G ROM: 软件平台:android 4.4xx 内核版本:linux3.4.xx 1.打开内核选项: Devices Drivers H ...

  3. android 陀螺仪简单的使用

    参考这篇博文 android 传感器使用与开发---陀螺仪传感器 没啥好说的,就是把陀螺仪的偏移量给计算出来拿来用 public class MainActivity extends AppCompa ...

  4. android 陀螺仪简单使用,判读手机是否静止状态

    陀螺仪允许您在任何给定时刻确定Android设备的角速度.简单来说,它告诉您设备绕X,Y和Z轴旋转的速度有多快.最近,即使是预算手机正在制造,陀螺仪内置,增强现实和虚拟现实应用程序变得如此受欢迎.通过 ...

  5. android 陀螺仪 加速度定位,Android陀螺仪版加速度计

    我正在构建一个Android游戏,我想弄清楚用户是否向左或向右倾斜设备(类似于当你将人从一侧移到另一侧时Temple Run的工作方式). 我已经阅读了很多教程和示例,并且我制作了示例应用程序,但是从 ...

  6. android 陀螺仪 应用,何时在Android上使用加速度计或陀螺仪

    用户覆盖: 大多数设备都有陀螺仪和加速度计,但几乎每个设备都有加速度计.特别是较旧的设备和较便宜的设备没有陀螺仪.不要忘记,因为它是一个孩子的应用程序,也许父母不想让小家伙使用他们的700美元的平板电 ...

  7. android 陀螺仪加速度,何时使用Android上的加速度计或陀螺仪

    用户覆盖: 大部分设备同时具有陀螺仪和加速度计,但几乎每设备有一个加速度计.特别是较旧的设备和较便宜的设备没有陀螺仪.不要忘记,因为它是一个孩子的应用程序,也许父母不希望小孩使用他们的超级700美元的 ...

  8. android 陀螺仪滤波_android – 卡尔曼滤波器 – 指南针和陀螺仪

    我正在尝试用陀螺仪,加速度计和万用表构建罗盘. 我正在将acc值与测量值融合以获得方向(使用旋转矩阵)并且它工作得非常好. 但现在我想添加陀螺仪,以便在磁传感器不准确时进行补偿.因此,我想使用卡尔曼滤 ...

  9. android陀螺仪轨迹,陀螺仪轨迹法长距离管道测量精度实测分析

    陀螺仪轨迹法长距离管道测量精度实测分析 陀螺仪轨迹法用于非开挖管道的精准坐标与位置测量已被电力与燃气等行业逐步了解与接受,近两年不断被引入到城市地下管线探测及电力与燃气管道验收标准中.由于管道埋于地下 ...

  10. android陀螺仪实现背景移动demo,基于HTML5陀螺仪实现移动动画效果

    这次给大家带来基于HTML5陀螺仪实现移动动画效果,基于HTML5陀螺仪实现移动动画效果的注意事项有哪些,下面就是实战案例,一起来看一下. 最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个 ...

最新文章

  1. Python 解决一行代码分成多行及多行代码放在一行
  2. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(不同分组配置不同的箱体填充色+Brewer调色板)实战
  3. mongoDB的常用语法
  4. 手把手教你实现SVM算法(二)
  5. php多图片上传并回显,如何用input标签和jquery实现多图片的上传和回显功能
  6. 关于string.Template的简单介绍
  7. 第十一届蓝桥杯省赛C++组试题 第4题 选择题判定
  8. android表情选择器,android 新浪微博客户端的表情功能的实现
  9. JavaScript开发手册
  10. jensen不等式(jensen不等式对于凹函数)
  11. MATLAB绘图中特殊符号的插入方法
  12. 华硕路由域名访问_“618” WiFi6 路由器选购推荐清单_路由器
  13. png图片怎么压缩大小又不损失画质?
  14. 把Excel数据填充word模板生成多份word文档
  15. docker加载镜像报错 dockerError processing tar file(exit status 1): no space left on device
  16. java解决撞库的问题_Web安全开发之验证码设计不当引发的撞库问题
  17. 能用四川电信卡开通的虚拟服务器,双网通手机也能用电信卡了?VoLTE开放:发短信就能开通...
  18. 时钟频率,时钟周期他们的关系是什么?
  19. Flutter BLoC 用户登录
  20. hive正则匹配:regexp_replace、regexp_extract、regexp

热门文章

  1. ensp系统服务器是哪个,ensp模拟器上的云是服务器吗
  2. 避免在移动端页面中使用100vh
  3. 如何结合均线分析伦敦金行情走势线图
  4. 注册和登录(关于Cookie)
  5. 各数据类型存储的字节数
  6. PowerDesigner设计逻辑数据模型的做法
  7. 2022年公路水运工程试验检测考试合格证书估分查分通知
  8. presto 0.166概述
  9. 【图像分割】基于FLICM算法实现图像分割含Matlab源码
  10. x[0],x[1],x[:,1],x[2,:] 区别