【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)

news2024/11/25 10:42:11

需要源码请点赞关注收藏后评论区留言~~~

一、传感器的种类

传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具。 因为具体的感应信息依赖于相关硬件,所以虽然Android定义了众多感应器,但是并非每部手机都能支持这么多感应器。 传感器一般借助于硬件监听环境信息改变,有时会结合软件监听用户的运动信息。

传感器常见的种类如下

Sensor类的传感器类型

传感器名称

说明

TYPE_ACCELEROMETER

加速度

常用于摇一摇功能

TYPE_MAGNETIC_FIELD

磁场

TYPE_ORIENTATION

方向

已弃用,取而代之的是getOrientation方法

TYPE_GYROSCOPE

陀螺仪

用来感应手机的旋转和倾斜

TYPE_LIGHT

光线

用来感应手机正面的光线强弱

TYPE_PRESSURE

压力

用来感应气压

TYPE_PROXIMITY

距离

TYPE_GRAVITY

重力

TYPE_STEP_DETECTOR

步行检测

用户每走一步就触发一次事件

TYPE_STEP_COUNTER

步行计数

记录激活后的步伐数

 运行测试App如下  每台手机支持的传感器功能可能不太一样 读者可自行测试

 代码如下

package com.example.iot;

import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SuppressLint("DefaultLocale")
public class SensorActivity extends AppCompatActivity {
    private TextView tv_sensor; // 声明一个文本视图对象
    private String[] mSensorType = {
            "加速度", "磁场", "方向", "陀螺仪", "光线",
            "压力", "温度", "距离", "重力", "线性加速度",
            "旋转矢量", "湿度", "环境温度", "无标定磁场", "无标定旋转矢量",
            "未校准陀螺仪", "特殊动作", "步行检测", "计步器", "地磁旋转矢量",
            "心跳速率", "倾斜检测", "唤醒手势", "掠过手势", "拾起手势",
            "手腕倾斜", "设备方向", "六自由度姿态", "静止检测", "运动检测",
            "心跳检测", "动态元事件", "未知", "低延迟离体检测", "低延迟体外检测"};
    private Map<Integer, String> mapSensor = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sensor);
        tv_sensor = findViewById(R.id.tv_sensor);
        showSensorInfo(); // 显示手机自带的传感器信息
    }

    // 显示手机自带的传感器信息
    private void showSensorInfo() {
        // 从系统服务中获取传感管理器对象
        SensorManager mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        // 获取当前设备支持的传感器列表
        List<Sensor> sensorList = mSensorMgr.getSensorList(Sensor.TYPE_ALL);
        String show_content = "当前支持的传感器包括:\n";
        for (Sensor sensor : sensorList) {
            if (sensor.getType() >= mSensorType.length) {
                continue;
            }
            mapSensor.put(sensor.getType(), sensor.getName());
        }
        for (Map.Entry<Integer, String> map : mapSensor.entrySet()) {
            int type = map.getKey();
            String name = map.getValue();
            String content = String.format("%d %s:%s\n", type, mSensorType[type - 1], name);
            show_content += content;
        }
        tv_sensor.setText(show_content);
    }

}

二、利用加速度传感器实现摇一摇功能

加速度传感器是最常见的感应器,大部分智能手机都内置了加速度传感器。 加速度传感器运用最广泛的功能是微信的摇一摇,用户通过摇晃手机寻找周围的人。

摇一摇功能实现步骤如下

(1)声明一个SensorManager对象。

(2)重写Activity的onResume方法,在该方法中注册传感器监听事件。

(3)重写Activity的onPause方法,在该方法中注销传感器事件。

(4)编写一个传感器事件监听器,该监听器继承自SensorEventListener,并实现onSensorChanged和onAccuracyChanged两个方法。

运行测试效果如下  摇一下手机 达到系统设定的阈值之后就会显示如下界面

 代码如下

package com.example.iot;

import android.annotation.SuppressLint;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.example.iot.util.DateUtil;

@SuppressLint("SetTextI18n")
public class AccelerationActivity extends AppCompatActivity implements SensorEventListener {
    private TextView tv_shake; // 声明一个文本视图对象
    private SensorManager mSensorMgr; // 声明一个传感管理器对象
    private Vibrator mVibrator; // 声明一个震动器对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_acceleration);
        tv_shake = findViewById(R.id.tv_shake);
        // 从系统服务中获取传感管理器对象
        mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        // 从系统服务中获取震动器对象
        mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorMgr.unregisterListener(this); // 注销当前活动的传感监听器
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 给加速度传感器注册传感监听器
        mSensorMgr.registerListener(this,
                mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // 加速度变更事件
            // values[0]:X轴,values[1]:Y轴,values[2]:Z轴
            float[] values = event.values;
            if ((Math.abs(values[0]) > 15 || Math.abs(values[1]) > 15
                    || Math.abs(values[2]) > 15)) {
                tv_shake.setText(DateUtil.getNowFullDateTime() + " 我看到你摇一摇啦");
                mVibrator.vibrate(500); // 系统检测到摇一摇事件后,震动手机提示用户
            }
        }
    }

    // 当传感器精度改变时回调该方法,一般无需处理
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

}

创作不易 觉得有帮助请点赞关注收藏~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JZ-7Y-15 AC220V【静态中间继电器】

系列型号&#xff1a; JZ-7Y-15静态中间继电器&#xff1b; JZ-7J-15静态中间继电器&#xff1b; JZ-7L-15静态中间继电器&#xff1b; JZ-7D-15静态中间继电器&#xff1b; JZ-7Y-16静态中间继电器&#xff1b; JZ-7J-16静态中间继电器&#xff1b; JZ-7L-16静态中间继电器&am…

【Redis-07】Redis哨兵机制Sentinel的实现原理

Sentinel是Redis高可用性的解决方案&#xff1a;由一个或者多个Sentinel实例组成的哨兵系统监视多个主从服务器&#xff0c;并实现主从服务器的故障转义。  Sentinel本质上只是一个运行在特殊模式下的Redis服务器&#xff0c;使用以下命令可以启动并初始化一个Sentinel实例&am…

Express 4 快速入门 - 基本路由

Express Express 中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Express4 快速入门 - 基本路由4.1 什么是路由4.2 定义简单路由4.2.1 在主页回复字符串4.2.2 响应/应用程序主页根路由 ( ) 上的 POST 请求&#xff1a;4.2.3 响应对/user路…

订单超时自动取消3种方案——我们用这种!

大家好&#xff0c;大家对电商购物应该都比较熟悉了&#xff0c;我们应该注意到&#xff0c;在下单之后&#xff0c;通常会有一个倒计时&#xff0c;如果超过支付时间&#xff0c;订单就会被自动取消。 下单 今天&#xff0c;我们来聊聊订单超时未支付自动取消的几种方案。 1…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【02】Nacos、Feign、Gateway

持续学习&持续更新中… 学习态度&#xff1a;守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【02】微服务的几大组件SpringCloud Alibaba 简介简介为什么使用版本选择Nacos作为注册中心Feign声明式远程调用Nacos作为配置中心基本使用核心概念命名空间&#xff1…

【Linux】进程通信 | 信号

本篇博客让我们一起来康康信号部分的内容 系统为CentOS7.6&#xff0c;完整代码见 Gitee 文章目录1.什么是信号1.1 何为异步?1.2 信号的种类1.3 信号产生1.4 信号动作2.系统接口2.1 signal2.1.1 前台进程和后台进程2.1.2 循环捕捉所有信号2.1.3 信号9/192.2 kill2.2.1 killall…

人工智能数学基础--概率与统计13:连续随机变量的标准正态分布

一、引言 在《人工智能数学基础–概率与统计12&#xff1a;连续随机变量的概率密度函数以及正态分布》介绍了连续随机变量概率分布及概率密度函数的概念&#xff0c;并介绍了连续随机变量一个重要的概率密度函数&#xff1a;正态分布的概率密度函数的定义以及推导、使用场景&a…

培养出最多亿万富翁的美国大学TOP10榜单

若论世界大学排名&#xff0c;除了U.S. News、QS、软科、泰晤士这四大权威排名外&#xff0c;另有一些依据不同指标的排名。下面知识人网小编就推荐这份福布斯榜单给出的美国大学排名&#xff0c;供感兴趣的读者围观。 福布斯去年发布了一份全球亿万富豪榜&#xff08;World’s…

怎么看网站域名有没有收录 收录情况怎么样 网站收录查询

对于网站收录的概念&#xff0c;互联网中或者搜索引擎中已经有大量的相关定义。网站收录&#xff0c;指的是爬虫爬取了网页&#xff0c;并将页面内容数据放入搜索引擎数据库中这一结果。 怎么看网站域名有没有收录?录情况怎么样? 用站长工具查询网站收录的操作步骤&#xff1…

[TIST 2022]No Free Lunch Theorem for Security and Utility in Federated Learning

联邦学习中的安全性和实用性没有免费午餐定理 No Free Lunch Theorem for Security and Utility in Federated Learning 目录摘要简介2 相关文献2.1 隐私测量2.2 联邦学习2.2.1 FL 中的威胁模型。2.2.2 FL 中的保护机制。2.3 隐私-实用权衡3 一般设置和框架3.1 符号3.2 一般设置…

前端如何实现网页变灰功能的?

备注&#xff1a;本文大量摘取前端充电宝公众号相关文章&#xff0c;大家感兴趣可以关注该公众号进行阅读学习 目录 1.引入 2.页面灰色实现方法 3.filter其他属性 A.blur()&#xff1a;模糊 B.brightness()&#xff1a;亮度 C.contrast()&#xff1a;对比度 C.opacity()…

unity---Mesh网格编程(六)

目录 1.模型切割 2.代码 1.模型切割 如图&#xff0c;对3D模型的Mesh网格进行切割&#xff0c;会经过若干个三角面。而切割后&#xff0c;将会产生新的面来组成左右两边的物体。 要记录每个顶点与顶点下标&#xff0c;新的面要顺时针绘制&#xff0c; 2.代码 using System.…

docker+nginx 安装部署修改资源目录配置文件和容器端口信息

查看docker镜像 可以先查看docker下是否存在nginx镜像&#xff0c;使用如下这些命令查看&#xff1a; docker images: 列出所有镜像。docker images nginx: 列出所有nginx镜像&#xff0c;不同版本等等。docker search nginx: 搜索查看所有nginx镜像信息。 拉取安装nginx镜像…

Java8 函数式编程【基础篇】

Java 8是Java在保持向后兼容的前提下首次迈出重要一步&#xff0c;相比之前&#xff0c;不再是只对类库的改良&#xff0c;在编写复杂的集合处理、并行化执行、代码简洁度等方面都有颠覆性的提升。本文将探索和理解函数式编程的含义&#xff0c;以及它在Java 8中的实现。 一、…

RESTful API是什么?看完你整个人都通透了

要弄清楚什么是RESTful API&#xff0c;首先要弄清楚什么是REST&#xff1f; 01 REST REpresentational State Transfer&#xff0c;英语的直译就是“表现层状态转移”。如果看这个概念&#xff0c;估计没几个人能明白是什么意思。那下面就让我来用一句话解释一下什么是RESTf…

低代码搭建质量管理解决方案,为企业管理提速降本

市场竞争的越来越卷&#xff0c;越来越多的制造企业认识到质量管理的重要性。尤其随着全球经济化与信息化的到来&#xff0c;质量管理已经成为企业管理的关键环节。然而与国际上具有先进技术和管理水平的企业相比&#xff0c;我国企业的质量管理较为薄弱&#xff0c;存在着质量…

【MATLAB】羽状图

目录 羽状图 羽状图 h0figure(toolbar,none,...position,[200 150 450 350],...name,实例28);subplot(2,1,1)alpha90:-10:0;rones(size(alpha));malpha*pi/180;nr*10;[u,v]pol2cart(m,n);feather(u,v)title(羽状图)axis([0 20 0 10])subplot(2,1,2)t0:0.5:10;x0.05i;yexp(-x*t…

R语言解释生存分析中危险率和风险率的变化

危险率函数 让我们模拟R中的一些数据&#xff1a; n < - 10000 h < - 0.5 t < - -log&#xff08;runif&#xff08;n&#xff09;&#xff09;/ h 该代码模拟了危险函数的存活时间&#xff0c;即常数。 视频&#xff1a;R语言生存分析原理与晚期肺癌患者分析案…

Ajax学习:jQuery发送ajax请求 通用方法$.ajax

app.all(/jQuery,(requset,response)>{response.setHeader(Access-Control-Allow-Origin,*);const data{name:张三};let strJSON.stringify(data);//需要转换称为json 否则传递的任然是对象response.send(str);//3s之后返回给客户端 }) $(button).eq(2).click(function() {/…

MySQL和Oracle JDBC驱动包下载步骤

MySQL官网&#xff1a;https://www.mysql.com/ 步骤如下&#xff1a; 1.点击DOWNLOADS 2.往下滑&#xff0c;找到MySQL Community&#xff08;GPL&#xff09;Downloands并点击 3.点击Connector/J 4.当前页面展示的是最新版本&#xff0c;要下载历史版本点击Archives 5.选择…