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

一、传感器的种类

传感器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<>();@Overrideprotected 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; // 声明一个震动器对象@Overrideprotected 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);}@Overrideprotected void onPause() {super.onPause();mSensorMgr.unregisterListener(this); // 注销当前活动的传感监听器}@Overrideprotected void onResume() {super.onResume();// 给加速度传感器注册传感监听器mSensorMgr.registerListener(this,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);}@Overridepublic 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); // 系统检测到摇一摇事件后,震动手机提示用户}}}// 当传感器精度改变时回调该方法,一般无需处理@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}

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

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

  1. 【Android App】利用自带的人脸检测器和OpenCV检测人脸讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~~ 一.利用人脸检测器识别人脸 对于简单的人脸识别操作,Android已经提供了专门的识别工具,名叫人脸检测器FaceDetector,部分常用方法如下 F ...

  2. 【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.开启定位功能 手机定位分为卫星定位和网络定位两大类. (1)卫星定位 卫星定位服务由几个全球卫星导航系统提供. 卫星定位的原理是根据多颗卫星与导航芯片 ...

  3. 【Android App】检查手机连接WiFi信息以及扫描周围WiFi的讲解及实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.检查是否连接WiFi以及输出WiFi信息 传统的定位方式不适用于室内的垂直定位,原因如下: (1)卫星定位要求没有障碍物遮挡,它在户外比较精准,在 ...

  4. 【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~~ 当今社会正在步入一个万物互联的时代,它的技术基石主要来自5G.物联网和人工智能. 三者融合产生了许多新产品,其中最璀璨的当数自动驾驶的电动车:它汇聚了最 ...

  5. 【Android App】人脸识别中扫描识别二维码实战解析(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~ 一.扫描识别二维码 不仅可以利用zxing库生成二维码,同样利用zxing库可以扫描二维码并解析得到原始文本,此时除了给build.gradle添加如下一 ...

  6. 【Android App】人脸识别中借助摄像头和OpenCV实时检测人脸讲解及实战(附源码和演示 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.借助摄像头实时检测人脸 与Android自带的人脸检测器相比,OpenCV具备更强劲的人脸识别功能,它可以通过摄像头实时检测人脸,实时检测的预览空 ...

  7. 【Android App】人脸识别中使用Opencv比较两张人脸相似程度实战(附源码和演示 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.比较两张人脸的相似程度 直方图由一排纵向的竖条或者竖线组成,横轴代表数据类型,纵轴代表数据多少. 图像直方图经常应用于特征提取.图像匹配等方面. ...

  8. 【Android App】获取照片里的位置信息及使用全球卫星导航系统(GNSS)获取位置实战(附源码和演示 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 一.获取照片里的位置信息 手机拍摄的相片还保存着时间.地点.镜头参数等信息,这些信息由相片接口工具ExifInterface管理,它的常用方法说明如下 ...

  9. 【Android App】实战项目之仿微信的附近的人(附源码和演示 超详细)

    需要全部源码请点赞关注收藏后评论区留言私信~~~ 艺术家常说"距离产生美",其实距离近才是优势,谁不希望自己的工作事少钱多离家近呢?不光是工作,像租房买房.恋爱交友,大家都希望找个 ...

最新文章

  1. 《预训练周刊》第12期:无注意力变换器、借蛋白质语言模型论进化速度
  2. LIST组件使用总结
  3. Linux下安装Octave
  4. Geek必备神器 - Google眼镜(Google glass)的十大特色
  5. Linux中select函数的使用 select() Linux linux函数 select
  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_24-页面预览-页面预览测试
  7. ANSYS ICEM CFD 网格划分步骤简要总结
  8. 嵌入式相关开源项目、库、资料
  9. 增加项目报告功能,支持与TAPD、Jira、禅道双向同步缺陷,MeterSphere开源持续测试平台v1.15.0发布
  10. 拉格朗日插值法及代码
  11. PHP开发erp功能模块,ERP基础知识之功能模块介绍
  12. python程序弹出输入框_Python弹出输入框并获取输入值的实例
  13. 生活随记 - 值班后第二天晚上失眠小记
  14. golang中的字符串
  15. 【华为OD机试】1038 - 学英语
  16. python爬虫小工具——下载助手
  17. Uncaught TypeError: Cannot add property 0, object is not extensible 引起的思考
  18. 哈工大计算机系统大作业-程序人生
  19. 渗透测试-Docker容器
  20. 企微社群引流方式大全

热门文章

  1. CSI Bridge Advanced 23.2.0 x64
  2. Quasar prerender-spa-plugin 踩坑指南
  3. NB-IOT 无线电流传感器 设备状态监测 微功耗测控终端 无线电量传感器功率 变送器电机监控
  4. 2022 CSP-J2 题解T1 T2
  5. Ubuntu22.04安装HPCC
  6. 菲涅尔定理及MATLAB实现
  7. 1042: 小丑排序
  8. MySQL长途售票系统_客车网上售票系统(Java源码+sql脚本)
  9. 【使用笔记】树莓派基于Python操作IIC接口的红外测温传感器
  10. 开启E680i的虚拟内存