Android 传感器使用

Android 传感器使用

Android小彩虹2021-07-13 22:40:34160A+A-

内容简介:近期遇到一个需要使用到传感器的项目,对传感器做了部分调研,这里把 Android 中的传感器使用总结一下。

基础知识

关于传感器,可能会用到关于设备的三个物理轴,这里解释一下:

传感器分类

传感器分为三种,但某些传感器方法取回的值可能是根据多个基础传感器计算而得,这里只做表象的区分:

Motion sensors

运动传感器:沿三个轴测量加速力和旋转力。此类别包括加速度计,重力传感器,陀螺仪和旋转矢量传感器。

  • TYPE_ACCELEROMETER:测量在所有三个物理轴(x,y和z)上应用于设备的加速力m / s2,包括重力。

  • TYPE_GRAVITY:测量在所有三个物理轴(x,y,z)上应用于设备的重力m / s2。

  • TYPELINEARACCELERATION:测量在所有三个物理轴(x,y和z)上应用于设备的加速力m / s2,不包括重力。

Environmental sensors

环境传感器:测量各种环境参数,例如环境空气温度和压力,照明和湿度。 此类别包括气压计,光度计和温度计。

  • TYPE_LIGHT:以lx为单位测量环境光水平(照度)。

  • TYPE_PRESSURE:以hPa或mbar测量环境空气压力。

  • TYPE_PROXIMITY:测量相对于设备视图屏幕的对象的接近度(cm)。该传感器通常用于确定手机是否被握在人的耳朵上。

  • TYPERELATIVEHUMIDITY:以百分比(%)测量相对环境湿度。

  • TYPEAMBIENTTEMPERATURE:以摄氏度(°C)为单位测量环境室温。

  • TYPETEMPERATURE:以摄氏度(°C)为单位测量设备的温度。此传感器实现因设备而异,并且此传感器已替换为API级别14中的TYPEAMBIENT_TEMPERATURE传感器

Position sensors

位置传感器:这些传感器测量设备的物理位置。 此类别包括方向传感器和磁力计。

  • TYPE_GYROSCOPE:测量设备在三个物理轴(x,y和z)中的每一个周围以rad / s为单位的旋转速率。

  • TYPEMAGNETICFIELD:以μT为单位测量所有三个物理轴(x,y,z)的环境地磁场。

  • TYPEROTATIONVECTOR:通过提供设备旋转矢量的三个元素来测量设备的方向。

  • TYPE_ORIENTATION:测量设备围绕所有三个物理轴(x,y,z)旋转的度数。 从API级别3开始,您可以通过使用重力传感器和地磁场传感器以及getRotationMatrix()方法获得设备的倾斜矩阵和旋转矩阵。(同时使用位置传感器

实现监听

对于传感器的监听,系统 API 封装的非常方便,只需要实现接口并重写方法即可,这里以监听加速度为例,其余都很相似:

Sensor.TYPE_ACCELEROMETER

1.获取 SensorManager 并注册监听


   

    private lateinit var sensorManager: SensorManager

    override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager

    sensorManager.registerListener(

    this,

    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),

    SensorManager.SENSOR_DELAY_NORMAL

    )

    }

2、实现 SensorEventListener 并重写方法


   

    override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {

    Log.e("xx", "onAccuracyChanged")

    }

    override fun onSensorChanged(event: SensorEvent?) {

    if (event?.sensor?.type == Sensor.TYPE_ACCELEROMETER) {

    val xAccelerate = event.values?.get(0)

    val yAccelerate = event.values?.get(1)

    val zAccelerate = event.values?.get(2)

    Log.e("xx", "xAccelerate:$xAccelerate\nyAccelerate:$yAccelerate\nzAccelerate:$zAccelerate")

    }

    }

就这么简单,但是要记得在对应的生命周期停止对传感器的监听!!!

参考资料

Android guide:

https://developer.android.com/guide/topics/sensors/sensorsenvironment

安卓各种传感器的使用:

https://blog.csdn.net/weixin38379772/article/details/79069494

完整代码地址:https://github.com/loosaSH/android-sensors

--END--

识别二维码,关注我们

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们