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

Android : SensorManager 传感器入门 简单应用

功能介绍:转动手机 图片跟着旋转

界面:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><ImageViewandroid:id="@+id/imageView"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:srcCompat="@drawable/baseline_img" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.mysensormanager;import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;/*** 1.获取SensorManager对象* 2.获取Sensor 对象* 3.注册Sensor 对象* 4.重写 onAccuracyChanged, onSensorChanged 方法* 5.注销Sensor对象*/
public class MainActivity extends AppCompatActivity implements SensorEventListener {SensorManager mSensorManager;Sensor sensor;ImageView imageView;private float startDegree = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.imageView);//获取传感器服务mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);/**获取传感器对象* Sensor.TYPE_ACCELEROMETER:加速度传感器,用于检测手机在X、Y、Z三个方向上的加速度变化。* Sensor.TYPE_GRAVITY:重力传感器,用于检测手机受到的重力加速度变化。* Sensor.TYPE_GYROSCOPE:陀螺仪传感器,用于检测手机的角速度变化。* Sensor.TYPE_MAGNETIC_FIELD:磁力传感器,用于检测设备周围的磁场强度和方向。* Sensor.TYPE_LIGHT:光线传感器,用于检测手机周围的光线强度。* Sensor.TYPE_PRESSURE:气压传感器,用于检测设备周围的大气压强。* Sensor.TYPE_LINEAR_ACCELERATION:线性加速度传感器,用于检测手机在X、Y、Z三个方向上的线性加速度变化。* Sensor.TYPE_ORIENTATION:方向传感器,用于检测手机的朝向变化。* Sensor.TYPE_PROXIMITY:距离传感器,用于检测设备与目标物体之间的距离* Sensor.TYPE_ROTATION_VECTOR:旋转矢量传感器,用于检测手机的旋转变化。* Sensor.TYPE_TEMPERATURE:温度传感器,用于检测手机的温度变化。* Sensor.TYPE_FINGERPRINT:指纹传感器,用于检测设备的指纹信息。* Sensor.TYPE_HEART_RATE:心率传感器,用于检测用户的心率变化。* Sensor.TYPE_STEP_COUNTER:步数传感器,用于检测用户行走的步数。* *///方向传感器,用于检测手机的朝向变化。sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);}@Overrideprotected void onResume() {super.onResume();//打开应用:创建onCreate --> 开始onStart-->运行onResume//重新打开应用:重新启动onRestart--> 开始onStart-->运行onResume//返回当前页:重新启动onRestart--> 开始onStart-->运行onResume//注册Sensor/** 传感器延时:* 多久获取一次数据  最快SENSOR_DELAY_FASTEST = 0适合游戏SENSOR_DELAY_GAME = 1绘画SENSOR_DELAY_UI = 2普通界面SENSOR_DELAY_NORMAL =3*/if (sensor != null) {mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);} else {// 设备可能不支持ORIENTATION传感器,处理这种情况...Toast.makeText(this, "设备可能不支持ORIENTATION传感器", Toast.LENGTH_SHORT).show();}}@Overrideprotected void onPause() {super.onPause();//退出应用:暂停onPause --> 停止onStop-->销毁onDestroy// home : 暂停onPause --> 停止onStop//跳转页面时:当前页:暂停onPause --> 停止onStop//注销Sensor对象if (sensor != null) {mSensorManager.unregisterListener(this);}}@Overridepublic void onSensorChanged(SensorEvent event) {//传感器发生改变//校验  if(event.sensor.getType() == Sensor.TYPE_ORIENTATION){}//values[0]: Acceleration minus Gx on the x-axis//values[1]: Acceleration minus Gy on the y-axis//values[2]: Acceleration minus Gz on the z-axisif (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {float degree = (float) event.values[0]; // 获取当前旋转的角度(以弧度为单位)并转换为度数格式//设置动画/** RotateAnimation* fromDegrees:旋转的开始角度。* toDegrees:旋转的结束角度。* pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。* pivotXValue:X坐标的伸缩值。* pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。* pivotYValue:Y坐标的伸缩值。* */RotateAnimation rotateAnimation = new RotateAnimation(startDegree, degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);//设置动画时间rotateAnimation.setDuration(300);imageView.startAnimation(rotateAnimation);startDegree = degree; // 更新上次旋转的角度为当前旋转的角度}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// 在这里可以处理传感器精度的变化,但与ORIENTATION传感器无关,因此可以忽略。}
}

注意事项:

1. 要注销Sensor对象

2.要在真机上测试,模拟器不支持

3.不要阻塞 onSensorChanged() 方法

4.避免使用过时的方法 或 传感器类型

5.在使用前先验证传感器 

6.谨慎选择传感器延时

相关文章:

Android : SensorManager 传感器入门 简单应用

功能介绍&#xff1a;转动手机 图片跟着旋转 界面&#xff1a; activity_main.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/andr…...

《点云处理》 点云去噪

前言 通常从传感器&#xff08;3D相机、雷达&#xff09;中获取到的点云存在噪点&#xff08;杂点、离群点、孤岛点等各种叫法&#xff09;。噪点产生的原因有不同&#xff0c;可能是扫描到了不想要扫描的物体&#xff0c;可能是待测工件表面反光形成的&#xff0c;也可能是相…...

npm login报错:Public registration is not allowed

npm login报错:Public registration is not allowed 1.出现场景2.解决 1.出现场景 npm login登录时,出现 2.解决 将自己的npm镜像源改为npm的https://registry.npmjs.org/这个&#xff0c;解决&#xff01;...

OpenHarmony 启动流程优化

目前rk3568的开机时间有21s&#xff0c;统计的是关机后从按下 power 按键到显示锁屏的时间&#xff0c;当对openharmony的系统进行了裁剪子系统&#xff0c;系统app&#xff0c;禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其…...

解决腾讯云CentOS 6硬盘空间不足问题:从快照到数据迁移

引言&#xff1a; 随着数据的不断增加&#xff0c;服务器硬盘空间不足变成了许多运维人员必须面对的问题。此主机运行了httpd&#xff08;apache服务&#xff09;&#xff0c;提供对外web访问服务,web资源挂载在**/data/wwwroot目录下,http日志存放在/data/wwwlogs目录下&…...

org.slf4j日志组件实现日志功能

slf4j 全称是Simple Logging Facade for Java。facade是一种设计模式。 slf4j 是一个抽象程度更高的日志组件&#xff0c;本身并不提供实际的日志功能。实际的日志功能是通过log4j等日志组件实现&#xff0c;而使用者只需要关心 slf4j 给出的API。 slf4j 仅仅是一个为Java程序提…...

3D小球跑酷

目录 一、前言 二、开发环境 三、场景搭建 1. 创建项目 2. 创建场景内物体 2.1 创建跑道 2.2 创建玩家 2.3 创建障碍物 2.4 改变跑道和障碍物的颜色 2.4.1 创建材质 2.4.2 给跑道和障碍物更换材质 四、功能脚本实现 1. 创建玩家脚本 2. 相机跟随 3. 胜负的判定 3.1 …...

PyQt6 QInputDialog输入对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…...

ASP.NET Core MVC依赖注入理解(极简个人版)

依赖注入 文献来源&#xff1a;《Pro ASP.NET Core MVC》 Adam Freeman 第18章 依赖注入 1 依赖注入原理 所有可能变化的地方都用接口在使用接口的地方用什么实体类通过在ConfigureService中注册解决注册的实体类需要指定在何种生命周期中有效 TransientScopedSingleton 2…...

基于SpringBoot+Vue实现的企业级微服务多租户多系统架构

...

美光将于 2025 年推出 1γ DRAM,并在日本生产HBM

美国内存巨头美光正准备从 2025 年开始在其位于日本广岛的晶圆厂生产最先进的“1γ”DRAM。同时&#xff0c;公司计划在同一晶圆厂生产高带宽存储器&#xff08;HBM&#xff09;&#xff0c;以满足对生成式人工智能应用日益增长的需求。 据《日经亚洲》12月13日报道&#xff0…...

【Docker】以service形式离线安装卸载的docker、compose服务

CentOS7离线卸载Docker步骤 移除开机自启 [rootCenOS-1 system]# systemctl disable docker移除注册文件 rm -rf /etc/systemd/system/docker.service删除相关安装目录 rm -rf $(find / -name docker)CentOS7离线安装Docker、Compose步骤 资源地址&#xff1a;docker_20.10…...

Dubbo RPC-Redis协议

Redis协议 特性说明 Redis 是一个高效的 KV 存储服务器。基于 Redis 实现的 RPC 协议。 2.3.0 以上版本支持。 使用场景 缓存&#xff0c;限流&#xff0c;分布式锁等 使用方式 引入依赖 从 Dubbo 3 开始&#xff0c;Redis 协议已经不再内嵌在 Dubbo 中&#xff0c;需要单…...

展开说说:Android之常用的延时执行策略

总结了以下六种常用的Android延时执行策略&#xff0c;以此记录&#xff1a; 1、TimerTask 2、Handler.postDelayed 3、Handler.sendEnptyMessageDelayeed 4、Thread.sleep线程休眠-需要在子线程 5、使用AlarmManager-全局定时器或者闹钟 6、Wait 首先定义一个时间常量&…...

Jenkins在window下配置Android打包配置

在Windows下配置Jenkins进行Android打包的步骤如下&#xff1a; 安装Jenkins&#xff1a;从Jenkins官网下载适用于Windows的安装包&#xff0c;并按照安装向导的指示完成安装。 启动Jenkins服务&#xff1a;启动Jenkins服务&#xff0c;确保服务正常运行。 配置Jenkins&#…...

云原生系列2-GitLab和Jenkins

1、GitLab类似github&#xff0c;是个私有仓库 1、GitLab安装&#xff0c;至少8G内存4核cpu # 查找Gitlab镜像 docker search gitlab/gitlab-ce # gitlab镜像拉取 docker pull gitlab/gitlab-ce # 查看镜像 docker images # 本机先建3个目录&#xff0c;为了gitlab容器通过挂…...

xcode无线真机调试详细图文步骤

步骤一、 步骤二&#xff1a; 步骤三&#xff1a; 配置完到这里&#xff0c;点击真机右键&#xff0c;菜单栏并未出现connect via ip address 选项&#xff0c;也没出现无线连接的小地球图标&#xff0c;别慌&#xff0c;接着进行下一步操作即可。 步骤四&#xff1a; 1.打开…...

EasyExcel合并相同内容单元格及动态标题功能的实现

一、最初版本 导出的结果&#xff1a; 对应实体类代码&#xff1a; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.al…...

【论文解读】Comparing VVC, HEVC and AV1 using Objective and Subjective Assessments

时间&#xff1a;2020 级别&#xff1a;IEEE 机构&#xff1a; IEEE 组织 摘要&#xff1a; 对3种最新的视频编码标准HEVC (High Efficiency video Coding)测试模型HM (High Efficiency video Coding)、amedia video 1 (AV1)和Versatile video Coding测试模型 (VTM)进行了客观和…...

动态窗口法Dynamic Window Approach在动态环境中避障

以这个博主的代码为基础&#xff0c;加了一个碰撞检测&#xff0c;但是这个碰撞检测目前还不完善&#xff0c;思路应该是这个思路&#xff0c;以后有时间再完善吧。 动态窗口法&#xff1a;【路径规划】局部路径规划算法——DWA算法&#xff08;动态窗口法&#xff09;|&#…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

免费批量Markdown转Word工具

免费批量Markdown转Word工具 一款简单易用的批量Markdown文档转换工具&#xff0c;支持将多个Markdown文件一键转换为Word文档。完全免费&#xff0c;无需安装&#xff0c;解压即用&#xff01; 官方网站 访问官方展示页面了解更多信息&#xff1a;http://mutou888.com/pro…...

今日行情明日机会——20250609

上证指数放量上涨&#xff0c;接近3400点&#xff0c;个股涨多跌少。 深证放量上涨&#xff0c;但有个小上影线&#xff0c;相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析&#xff08;基于最新图片数据&#xff09; 1. 医药&#xff08;11家涨停&#xff09; 代表标…...