Android 判断手机放置的方向

#1024程序员节|征文#

文章目录


需求

老板:我有个手持终端,不能让他倒了,当他倒或者倾斜的时候要发出报警;

程序猿:我这.....

老板:要快!!!明天就要看到接过

程序猿:就让他爆炸吧😆😆😆😆😆😆

一、陀螺仪传感器

陀螺仪传感器又叫做角速度传感器。它是能检测到物体在空间中的姿态,朝向及转动角度的传感器。它被广泛应用于航空航天导航,便携智能设备体感检测,以及汽车姿态的传感等各个方面。陀螺仪与加速度计的主要区别就是陀螺仪主要用来测量角速度的,而加速度计是测线性加速度的。

看了上面的介绍,哎 能达到这个要求呦

二、使用步骤

1.判断设备是否支持陀螺仪传感器

Kotlin 复制代码
val sensorManager = getSystemService(SENSOR_SERVICE) 
 val defaultSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_GYROSCOPE)
if(null!=defaultSensor ){
//支持
}else{
//不支持
}

2.注册陀螺仪传感器监听

代码如下:

Kotlin 复制代码
sensorManager.registerListener(
            this, defaultSensor, SensorManager.SENSOR_DELAY_NORMAL
        ) 
 override fun onSensorChanged(event: SensorEvent?) {
        if (event!!.sensor.type == Sensor.TYPE_GYROSCOPE) {
 // 陀螺仪角度变更事件
                val x = event.values[0] //X轴
                val y = event.values[1]  //Y轴
                val z = event.values[2]  //Z轴 
        }
    }

    override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
        Log.e("TAG", "精度变化: $accuracy")
    }

注意:

1、在获取到监听的时候,使用z轴一个轴的判断也是可以的,但是他的值有时候会固定增加,在时候的时候最好也是结合上x轴和y轴的值,三个值一起判断,这样判断起来更加准确。

2、一定要使用多个设备进行反复测试,因为这个陀螺仪有可能在每一台设备中的初始值都是不一样的。

3、建议写个校准功能,这样如果每一台设备的值都不一样,就可以每一台设备进行独立校准了,更加灵活并且判断的也更加准确。

3.常用传感器的种类

类型 说明 用途
TYPE_ACCELEROMETER 加速计传感器:测量在所有三个物理轴向(x、y 和 z)上施加在设备上的加速力(包括重力),以 m/s2 为单位。 动态检测(摇晃、倾斜等)
TYPE_GRAVITY 重力传感器:测量在所有三个物理轴向(x、y、z)上施加在设备上的重力,单位为 m/s2。 动态检测(摇晃、倾斜等)
TYPE_GYROSCOPE 陀螺仪传感器:测量设备在三个物理轴向(x、y 和 z)上的旋转速率,以 rad/s 为单位。 动态检测(摇晃、倾斜等)
TYPE_LIGHT 光传感器:测量环境光级(照度),以 lx 为单位。 控制屏幕亮度,自动调节亮度
TYPE_MAGNETIC_FIELD 磁场传感器:测量所有三个物理轴向(x、y、z)上的环境地磁场,以 μT 为单位。 罗盘
TYPE_ORIENTATION 方向传感器:测量设备围绕所有三个物理轴(x、y、z)旋转的度数。从 API 级别 3 开始,您可以结合使用重力传感器、地磁场传感器和 getRotationMatrix() 方法来获取设备的倾角矩阵和旋转矩阵。 确定设备位置
TYPE_PROXIMITY 接近传感器:测量物体相对于设备显示屏幕的距离,以 cm 为单位。该传感器通常用于确定手机是否被举到人的耳边。 通话过程中手机的位置;例如贴近耳朵的时候屏幕变暗
TYPE_ROTATION_VECTOR 旋转矢量传感器:通过提供设备旋转矢量的三个元素来检测设备的屏幕方向。 动态检测和旋转检测。

看Sensor这个类里面的传感器是有42种传感器类型,但是有的手机会支持有的手机不支持,还得需要根据当前手机支不支持来判断了,以上只列举了常用的几种类型。


总结

传感器需要硬件的配合,一定要检测好硬件是否支持。如果硬件不支持,开发一切都是徒劳的!!!

相关推荐
fangzhanpeng1686 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心9 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552715 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552715 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝16 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552717 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552717 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552719 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552720 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552721 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节