当前位置: 首页 > news >正文

Android 判断手机放置的方向

#1024程序员节|征文#

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


需求

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

程序猿:我这.....

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

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

一、陀螺仪传感器

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

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

二、使用步骤

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

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

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

代码如下:

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种传感器类型,但是有的手机会支持有的手机不支持,还得需要根据当前手机支不支持来判断了,以上只列举了常用的几种类型。


总结

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

http://www.lryc.cn/news/469019.html

相关文章:

  • Telegram机器人的手机部署
  • ffmpeg视频滤镜: 色温- colortemperature
  • Django+Vue全栈开发项目入门(二)
  • 【ubuntu改源】
  • SQLI LABS | Less-9 GET-Blind-Time based-Single Quotes
  • 【小白学机器学习24】 用例子来比较:无偏估计和有偏估计
  • C++在实际项目中的应用第二节:C++与网络编程
  • 依赖关系是危险的
  • ipguard与Ping32如何加密数据防止泄露?让企业信息更安全
  • gitlab 的备份与回复
  • 创建型模式-----建造者模式
  • 威胁 Windows 和 Linux 系统的新型跨平台勒索软件:Cicada3301
  • Go 语言基础教程:7.Switch 语句
  • mysql原理、部署mysql主从+读写分离、监控mysql主从脚本
  • 模型选择拟合
  • 文案语音图片视频管理分析系统-视频矩阵
  • ArcGIS计算落入面图层中的线的长度或面的面积
  • ctfshow-web入门-web172
  • Keep健身TV版 3.3.0 | 针对智能电视的健身塑形软件
  • 推荐一些关于计算机网络和 TCP/IP 协议的书籍
  • 生成式AI浪潮下的商业机遇与经济展望 —— 与互联网时代的比较
  • Go 标准库
  • AUTOSAR_EXP_ARAComAPI的6章笔记(5)
  • Photoshop中的混合模式公式详解
  • Vue 自定义指令 Directive 的高级使用与最佳实践
  • 万字图文实战:从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架
  • 在WebStorm遇到Error: error:0308010C:digital envelope routines::unsupported报错时的解决方案
  • 数据库产品中SQL注入防护功能应该包含哪些功能
  • Ribbon客户端负载均衡策略测试及其改进
  • linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信