传感器的分类

动作传感器

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

位置传感器

方向传感器
磁力传感器

环境传感器

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

传感器的使用

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()

加速度传感器的使用

加速度传感器的作用( 注:看原文)

手机三维坐标系统

主要代码

//得到系统服务(传感器服务) 得到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());}
}

结果演示

转载自:https://blog.csdn.net/weixin_43896750/article/details/95942772?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.compare

android手机传感器总结相关推荐

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

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

  2. Android手机传感器的使用

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

  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. “巨杉数据库”获1000万美元B轮融资,DCM领投
  2. 揭秘一个操作灰色关键词牟取暴利的案例
  3. 【ABP杂烩】面向切面编程(AOP)知识总结
  4. css04使用外部样式
  5. python inspect模块解析
  6. abb工业机器人教程 zxw_【ABB工业机器人应用】YUMI-软管装配
  7. leetcode 397 整数替换
  8. 【matlab】线性空间滤波器的实现
  9. Dropout和BN层的模式切换
  10. 基于javaweb的驾校车辆教练预约系统ssm+Vue
  11. 霍尼韦尔扫描枪设置手动方法
  12. 彗星通行证的积分规则是什么?
  13. 900万!!!!!!!!这也太强了吧!!!我的老天!!!!!!!!!!
  14. 微信小程序开发:调用百度文字识别API实现图文识别
  15. html5新特性(一)
  16. java 写的星际争霸_用java写星际争霸的ai
  17. Oauth2 中 access_token和refresh_token的过期时间
  18. 随着计算机科学技术和互联网,(题文)下列各句中加点成语的使用,全都正确的一项是、①随着计算机科学技术和互联网技术的快速......
  19. python彩票预测与分析_294期黄欢福彩3D预测奖号:跨度和值分析
  20. 544、RabbitMQ详细入门教程系列 -【手动消费确认】 2022.09.05

热门文章

  1. 【C++】Loki库使用
  2. 自制MyEclipse豆沙绿主题
  3. 在线答题系统的技术原理介绍
  4. 一文搞懂“如何通过群晖+DNSPod DDNS搭建私有云服务?”
  5. Ubuntu20.04LTS 安装QQ 微信 钉钉 最简单,最好用的方式!
  6. 手机无线网卡最高支持到866Mbps
  7. 课设系列:51单片机制作智能时钟闹钟
  8. VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
  9. 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
  10. c语言负2是偶数吗,负2是偶数还是奇数 奇偶数有正负之分吗