Android 传感器使用

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

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

基础知识

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

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–

识别二维码,关注我们

Android 传感器使用

今天的文章Android 传感器使用分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15099.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注