目前手机集成了多个不同用途的传感器。最近项目中需要用到加速度传感器和方向传感器,故做一下笔记。

加速度传感器,用于检测手机运动状态。

方向传感器,用于检测手机方向状态。

传感器调用方式:

1、初始化

SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//指定监听的传感器类型
//all为全部,ACCELEROMETER为加速度,ORIENTATION为方向
Sensor orientsensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

2、注册监听

//方式1:当前activity实现SensorEventListener接口
manager.registerListener(Mainactivity.this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
//方式2:自定义传感器监听器,实现SensorEventListener
sensorManager.registerListener(MycustomSensorListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);

3、实现OnSensorChange方法,获取 x,y,z三轴的坐标。

if (event.sensor.getType() == Sensor.TYPE_ORIENTATION){                     float x = event.values[0]; float y = event.values[1]; float z = event.values[2];
}

4、使用完毕,记得注销

if (null != manager && null != sensor ){manager.unregisterListener(MainActivity.this,sensor);
}

需要说明的是,不同手机的传感器灵敏度不同,而且传感器的调用是不间断的,所以使结果更准确,最好是取一段时间内的传感器变化,为适配大多数手机,需要设定一个阈值或者范围。

例如调用加速度传感器,检测手机摇一摇:

    //检测的时间间隔private static final int UPDATE_INTERVAL = 100;private long mLastUpdateTime;private float mLastX, mLastY, mLastZ;//摇晃检测阈值,决定了对摇晃的敏感程度,越小越敏感private int shakeThreshold = 1200;
    @Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {long currentTime = System.currentTimeMillis();long diffTime = currentTime - mLastUpdateTime;if (diffTime < UPDATE_INTERVAL) {return;}mLastUpdateTime = currentTime;float x = event.values[0];float y = event.values[1];float z = event.values[2];float deltaX = x - mLastX;float deltaY = y - mLastY;float deltaZ = z - mLastZ;mLastX = x;mLastY = y;mLastZ = z;float delta = (float) (Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / diffTime * 10000);// 当检测到一个摇晃(加速度的差值大于指定阈值)if (delta > shakeThreshold ) {dosomething();}}}

关于方向传感器坐标轴

z是指向地心的方位角,x轴是仰俯角(由静止状态开始前后反转),y轴是翻转角(由静止状态开始左右反转)。

方向传感器结合地磁传感器可以实现指南针功能。单独使用,可以检测手机的方向,例如竖屏横屏状态。

    @Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_ORIENTATION){long currentTime = System.currentTimeMillis();long diffTime = currentTime - mLastUpdateTime;if (diffTime < UPDATE_INTERVAL) {return;}mLastUpdateTime = currentTime;float x = event.values[0];if ( 260 < x && x < 290 ){screenStatus = 1;//右横屏}else if (80 < x && x < 110){screenStatus = 2;//左横屏}else {screenStatus = 0;//竖屏}}}

其实检测竖屏横屏有多种方式,但有些方法会存在适配问题,有些机子不管用,传感器基本都适用,灵敏度会有差异而已

Android开发之传感器(加速度传感器、方向传感器)相关推荐

  1. 安卓开发笔记(十一)—— 方向传感器,实现摇一摇动画音效,GPS定位

    中山大学数据科学与计算机学院本科生实验报告 (2018年秋季学期) 项目源码:Github传送门 一.实验题目 第十六周任务 传感器 第十六周实验目的 学会使用加速度传感器 学会使用地磁传感器 学会获 ...

  2. Android开发之如何自定义垂直方向的SeekBar

    SeekBar进度条在项目开发过程中使用的太频繁了,比如媒体播放器当前播放的时间进度等.那么今天将对seekbar的使用做一个总结,后面写工作要用到直接过来copy就好.这边seekbar的使用分为横 ...

  3. 主要是web开发和android开发 最好是选择一个方向先专一去学, 半瓶子醋什么都想学你会发现到最后什么都不会,或者比别人多花出了太多的精力 我曾经学java的时候好高骛远,因为当时老师是一个c+

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一 ...

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

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

  5. Android 传感器之方向传感器

    一般情况下,在android系统中获取手机的方位信息在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaultSensor(Sensor.TY ...

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

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

  7. Android 电子罗盘 --指南针(方向传感器的应用)

    ,图片神马的在网上搜个指南针图片就好了,本来没有注释,发上来之后感觉不行,还是加上吧,方便学习 main.xml <?xml version="1.0" encoding=& ...

  8. 浅谈百度地图的简单开发之结合方向传感器实现定位功能(三)

    今天我们来谈下百度地图的定位功能,在此之前我已经将百度地图的基本地图大概说了下,其实百度地图的基本功能还有很多的内容.感兴趣的可以到百度地图的开发者的官网看看.今天就开始来讲下百度地图中的定位功能. ...

  9. 百度地图的简单开发之方向传感器实现定位功能

    今天我们来谈下百度地图的定位功能,在此之前我已经将百度地图的基本地图大概说了下,其实百度地图的基本功能还有很多的内容.感兴趣的可以到百度地图的开发者的官网看看.今天就开始来讲下百度地图中的定位功能. ...

  10. Android 电子罗盘--指南针(方向传感器的应用)

    转载自: http://blog.csdn.net/onlyonecoder/article/details/8475653 图片神马的在网上搜个指南针图片就好了,本来没有注释,发上来之后感觉不行,还 ...

最新文章

  1. Web应用架构-Nginx
  2. python可以从事什么工作-学完Python能从事哪些工作?
  3. 启动文件需要做的工作
  4. LeetCode 55跳跃游戏56合并区间57插入区间
  5. 10-表格添加、删除
  6. 检测某个IP是否属于某个网段范围
  7. 计算机英语四六级对调剂有影响吗,英语四六级对考研有什么影响?不过会被歧视吗?...
  8. Ubuntu 10.04下SSH配置
  9. 链表的基本操作 java_Java-实现链表的基本操作
  10. Question of the Day: Microsoft | Database, Multiple Questions in One
  11. linux 如何格式化ext2,Linux的Ext2文件系统(InodeBlock)详解
  12. ubuntu-18.04 设置开机启动脚本-亲测有效
  13. Centos7中systemctl命令详解
  14. Linux ubuntu centos 文件目录是什么意思
  15. Python规范神器(PEP8 ),Pylint是代码检查工具
  16. r语言如何计算t分布临界值_第十二讲 R-配对样本t检验
  17. 内网穿透-把自己的电脑部署为公网可访问的服务器
  18. Vue - 列表拖曳排序 / 鼠标拖动改变顺序排列高效简洁组件(支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无 BUG)
  19. python处理PPOCRLabel标注的数据用于LPRNet与Yolo的训练
  20. PLC编程实现在指定范围内生成一个随机数

热门文章

  1. 使用Python实现淘宝订单定时付款
  2. W3Cschool从零开始学C语言笔记(1-2)位、字节及排列组合
  3. 在线教育大数据营销平台实战(五):CRM线索培育机制及动态评分模型
  4. kali渗透姿式小汇总
  5. 没有投屏标志怎么投屏_没有【TV】小图标,手机怎么投屏电视
  6. 域名到期查询如何查看?有什么新方法吗?
  7. android手机怎么投屏到电视盒子,手机钉钉怎么投屏到电视上
  8. CTFHub-file_get_contents
  9. Map container is already initialized.
  10. 微信小程序 - 打开跳转 H5 网页链接(小程序内打开网页)