安卓传感器使用

  • 传感器的分类
    • 动作传感器
    • 位置传感器
    • 环境传感器
  • 传感器的使用
    • 获取安卓手机中所有传感器
    • 传感器事件概念
    • 如何将传感器注册到应用程序上?
    • 传感器的采样率
    • 传感器的属性
    • 加速度传感器的使用
    • 光线传感器的使用
    • 方向传感器的使用
    • 距离传感器的使用

传感器的分类

动作传感器

加速度传感器
重力传感器
陀螺仪

位置传感器

方向传感器
磁力传感器

环境传感器

温度传感器
压力传感器
亮度传感器

传感器的使用

1.获取SensorManager对象
2.执行SensorManager对象的getdefaultSensor()方法获取Sensor对象
3.获取Sensor对象的各种属性

获取安卓手机中所有传感器

public class MainActivity extends AppCompatActivity {private Button sensorButton;//SensorManager用于管理手机中所有传感器private SensorManager sensorManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = findViewById(R.id.toolbar);setSupportActionBar(toolbar);FloatingActionButton fab = findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();}});//得到系统服务(传感器服务) 得到SensorManagner对象sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//获取ButtonsensorButton = (Button)findViewById(R.id.SensorButton);//给Button绑定监听器sensorButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//得到手机中所有传感器List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);for(Sensor sensor : sensors) {System.out.println(sensor.getName());}}});}

输出结果

传感器事件概念

传感器在通电的情况下不断地接收数据,我们的应用程序首先会把传感器注册到应用程序上,即告诉安卓操作系统应用程序需要用到某一个或几个传感器。当传感器检测到变化时,就会产生一个传感器事件(是一个对象)。传感器将传感器事件交给应用程序,通过传感器时间对象获取在这一时刻的数据。

如何将传感器注册到应用程序上?

使用SensorManager的registerListener方法

public boolean registerListener(SensorEventListener listener,Sensor sensor,int rate)

注册监听器registerListener
监听器接口对象,要实现该接口 SensorEventListener listener
传感器对象(注册的是哪一个传感器)Sensor sensor
注册传感器传递数据的时间 int rate
该函数返回的是布尔值,若注册的传感器在当前设备上是可用的,则返回值为真,否则为假。

传感器的采样率

SENSIR_DELAY_NORMAL (200000us)
SENSOR_DELAY_UI (60000us)
SENSOR_DELAY_GAME (20000us)
SENSOE_DELAY_FASTEST (0us)
设置传感器的准则:
尽量使用比较低的传感器采样率,这样对系统的负荷比较小,可以省电

传感器的属性

1.传感器的名称
getName()
2.传感器的制造商
getVendor()
3.传感器功率
getPower()
4.传感器的分辨率
getResolution()

加速度传感器的使用

加速度传感器的作用
{ A d = − ∑ F s / m a s s A d = − g − ∑ F / m a s s \left\{ \begin{aligned} A_{d} =- \sum F_{s}/mass\\ A_{d} =-g- \sum F/mass\\ \end{aligned} \right. ⎩⎨⎧​Ad​=−∑Fs​/massAd​=−g−∑F/mass​
手机三维坐标系统

主要代码

//得到系统服务(传感器服务) 得到SensorManagner对象sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//获取加速度传感器对象Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//注册传感器sensorManager.registerListener(new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {//float acc = event.accuracy;//float lux = event.values[0];System.out.println("x---->" + event.values[0]);System.out.println("y---->" + event.values[1]);System.out.println("z---->" + event.values[2]);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}},accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL);

输出结果

滤波器过滤加速度

public class MainActivity extends AppCompatActivity {private Button sensorButton;private Button sensorButton1;//重力加速度private float gravity[] = new float[3];//直线加速度private float lineaner_acceleration[] = new float[3];//SensorManager用于管理手机中所有传感器private SensorManager sensorManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//得到系统服务(传感器服务) 得到SensorManagner对象sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//获取加速度传感器对象Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//注册传感器sensorManager.registerListener(new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {final  float alpha = 0.8f;gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];lineaner_acceleration[0] = event.values[0] - gravity[0];lineaner_acceleration[1] = event.values[1] - gravity[1];lineaner_acceleration[2] = event.values[2] - gravity[2];System.out.println(lineaner_acceleration[0]);System.out.println(lineaner_acceleration[1]);System.out.println(lineaner_acceleration[2]);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}},accelerometerSensor,SensorManager.SENSOR_DELAY_NORMAL);

运行结果

光线传感器的使用

主要代码

//得到系统服务(传感器服务) 得到SensorManagner对象sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);//获取光线传感器对象Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);//注册传感器sensorManager.registerListener(new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {//获取传感器精度和亮度float acc = event.accuracy;float lux = event.values[0];System.out.println("acc---->" + acc);System.out.println("lux---->" + lux);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}},lightSensor,SensorManager.SENSOR_DELAY_NORMAL);

结果

方向传感器的使用

通过方向传感器可以获取设备与地球磁场北极之间的夹角

获取的值

1.Azimutg:设备围绕z轴旋转的角度,y轴与地磁北极之间的夹角,取值范围在0至360度之间

2.Pitch:设备围绕x轴旋转的角度,当z轴向y轴的正方向旋转时,该值为正数,反之则为负数,取值范围在-180度到180度之间

3.Roll:设备围绕y轴旋转的角度,当z轴向x轴正方向旋转时,该值为正数,反之则为负数,取值范围在-90度到90度之间
主要代码

public class MainActivity extends Activity implements SensorEventListener{private SensorManager msensorManager;private Sensor mOrientation;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);msensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mOrientation = msensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);}@Overridepublic void onAccuracyChanged(Sensor sensor,int accuracy){}@Overrideprotected void onResume(){super.onResume();msensorManager.registerListener(this,mOrientation,SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause(){super.onPause();msensorManager.unregisterListener(this);}@Overridepublic void onSensorChanged(SensorEvent event){float azimuth_angle = event.values[0];float pitch_angle = event.values[1];float roll_angle = event.values[2];System.out.println("azimuth_angle--->" + azimuth_angle);System.out.println("pitch_angle--->" + pitch_angle);System.out.println("roll_angle--->" + roll_angle);}
}

结果演示

距离传感器的使用

距离传感器的作用
判断设备与其它物体之间的距离
主要代码

public class MainActivity extends Activity implements SensorEventListener{private SensorManager msensorManager;private Sensor mProximity;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);msensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mProximity = msensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);}@Overridepublic void onAccuracyChanged(Sensor sensor,int accuracy){}@Overrideprotected void onResume(){super.onResume();msensorManager.registerListener(this,mProximity,SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause(){super.onPause();msensorManager.unregisterListener(this);}@Overridepublic void onSensorChanged(SensorEvent event){float distance = event.values[0];System.out.println("distance--->" + distance);System.out.println(mProximity.getMaximumRange());}
}

结果演示

PS:本文由看过Mars老师教程后总结

Android手机传感器的使用相关推荐

  1. 我的物联网之路-Android手机传感器概况(地磁为主)

    前言:本文主要以地磁为主介绍android的传感器类型,以及使用方法,再提供一个简单的demo供新手进行测试.研究生方向主要是物联网方向,虽然刚接触不久,但也有个大致的概念,本文算是开山之作-_-,之 ...

  2. android手机传感器总结

    传感器的分类 动作传感器 加速度传感器 重力传感器 陀螺仪 位置传感器 方向传感器 磁力传感器 环境传感器 温度传感器 压力传感器 亮度传感器 传感器的使用 1.获取SensorManager对象 2 ...

  3. android手机传感器坐标系,一种将手机内置传感器采集数据从手机坐标系转换到参考坐标系的处理方法与流程...

    本发明提出了一种将手机内置传感器采集的三轴加速度数据从手机坐标系转换到大地参考坐标系的处理方法,该方法涉及到移动通信.模式识别和情景感知等领域. 背景技术: 目前基于智能手机的行为识别是环境智能中的一 ...

  4. android磁场传感器页面布局在哪,教程:Android传感器—传感器查询demo

    今天给大家带来一个篇安卓传感器查询的干货教程,五一出去旅游看人山人海,不如宅在家学技术! 在Android系统中提供有加速度.磁场.方向.陀螺仪.光线.压力.温度和接近等传感器.传感器系统会主动对上层 ...

  5. android 传感器ceshi,Android代码-传感器-测试手机支持那几种传感

    Android代码----传感器-----测试手机支持那几种传感 一个小小Demo检测手机支持那几种传感: 具体代码如下: [Java代码]DemoSensorActivity.java packag ...

  6. Android手机HC-05蓝牙连接Arduino nano获取DHT-11温湿度传感器数据

    如果您觉得本文对您有用,希望您点赞,收藏并且把它分享出去,不明白的可以在评论区留言,我会一一解答,感谢您的支持!! 目标 Android手机HC-05蓝牙连接Arduino nano获取DHT-11温 ...

  7. android关闭传感器,您如何在安卓10手机上打开和关闭传感器

    这是您如何在Android 10手机上打开和关闭传感器的方法.最新的Android智能手机配备了各种传感器和突破性的新功能.温度,湿度和气压计传感器,接近传感器,RGB光传感器,加速度计,磁力计和陀螺 ...

  8. 使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建

    现代手机拥有许多传感器,包括地磁.姿态.GPS.光照.温度.气压.摄像.声音.电磁等,完全就是一个高度集成的科学仪器.不夸张的说,一部手机加上一个外围的计算机和控制系统,做一个功能较强的自主移动机器人 ...

  9. 使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能

    在上一篇,我们搭建了开发环境.本篇,使用C++代码真正实现功能.我们使用UDP协议从手机上指定发送的目的地.端口.效果如下图,完整工程参考https://gitcode.net/coloreagles ...

最新文章

  1. Go 学习笔记(84)— Go 项目目录结构
  2. Html5 FileReader 对文件进行Base64编码
  3. rust(70)-条件表达式
  4. Visual Studio 2012 C# ActiveX控件开发总结
  5. Spring Boot - 开发Web应用
  6. 死磕算法!35 篇算法设计实例+6 本超赞好书打包送你
  7. 剑指offer答案python_剑指offer(python)(未完)
  8. 华为手机计算机快捷,快速让华为手机变成一台电脑,INNOCN便携显示器的更多玩法...
  9. word文档计算机基础考试,计算机基础考试题库(含答案)48924
  10. matlab 函数semilogy()
  11. python 空白行_python去掉空白行的多种实现代码
  12. 进击的拼多多,淘宝如何应对
  13. java 下载暂停实现_在文件下载中实现暂停/恢复
  14. Python实现《人民的名义》关系可视化
  15. vue中nextTick的实际应用
  16. 通过Mixamo生成人物动画并导入Unity实现资源可用的方法
  17. 【Power BI+Excel+Python】2019年4月全国数据分析招聘岗位可视化分析
  18. java获取系统时间差_java获取系统时间与实际相差8小时的解决方法
  19. Emacs 入门指引(一) Emacs简介
  20. python压缩文件tar_python 实现tar文件压缩解压的实例详解

热门文章

  1. 数码相机拍摄时该如何设置分辨率
  2. CVPR2019 | Libra R-CNN 论文解读
  3. 《FFmpeg Basics》中文版-01-FFmpeg基本介绍
  4. Jenkins 邮件模板配置
  5. Nginx限制客户端连接并发及限流的理解
  6. css flex布局 —— 容器属性 align-items
  7. 办公用计算机管理办法,办公区网络和办公电脑管理办法
  8. SIM71004G模块使用Linux C语言实现打电话发短信
  9. 2017乌鲁木齐网络赛 j 题
  10. 网络安全实训记录(2020.7.15-2020.7.19)