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

Android之使用传感器获取相应数据

Android的大部分手机中都有传感器,传感器类型有方向、加速度(重力)、光线、磁场、距离(临近性)、温度等。

方向传感器: Sensor.TYPE_ORIENTATION

加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER

光线传感器: Sensor.TYPE_LIGHT

磁场传感器: Sensor.TYPE_MAGNETIC_FIELD

距离(临近性)传感器: Sensor.TYPE_PROXIMITY

温度传感器: Sensor.TYPE_TEMPERATURE

//获取某种类型的感应器

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//注册监听,获取传感器变化值

sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);

上面第三个参数为采样率:最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个建议,不保证特定的采样率可用。

最快: SensorManager.SENSOR_DELAY_FASTEST

最低延迟,一般不是特别敏感的处理不推荐使用,该种模式可能造成手机电力大量消耗,由于传递的为原始数据,算法不处理好将会影响游戏逻辑和UI的性能。

游戏: SensorManager.SENSOR_DELAY_GAME

游戏延迟,一般绝大多数的实时性较高的游戏都使用该级别。

普通: SensorManager.SENSOR_DELAY_NORMAL

标准延迟,对于一般的益智类或EASY级别的游戏可以使用,但过低的采样率可能对一些赛车类游戏有跳帧现象。

用户界面: SensorManager.SENSOR_DELAY_UI

一般对于屏幕方向自动旋转使用,相对节省电能和逻辑处理,一般游戏开发中我们不使用。

使用传感器做应用的难点在于获取数据后如何处理,获得相应需要的效果,这里涉及很多数学物理的知识……

下面使用一个代码实例演示如何获取方向与加速度的数据:

public class MainActivity extends Activity { private TextView accelerometerView; private TextView orientationView; private SensorManager sensorManager; private MySensorEventListener sensorEventListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); sensorEventListener = new MySensorEventListener(); accelerometerView = (TextView) this.findViewById(R.id.accelerometerView); orientationView = (TextView) this.findViewById(R.id.orientationView); //获取感应器管理器 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { //获取方向传感器 Sensor orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); sensorManager.registerListener(sensorEventListener, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL); //获取加速度传感器 Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(sensorEventListener, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL); super.onResume(); } private final class MySensorEventListener implements SensorEventListener { //可以得到传感器实时测量出来的变化值 @Override public void onSensorChanged(SensorEvent event) { //得到方向的值 if(event.sensor.getType()==Sensor.TYPE_ORIENTATION) { float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; float z = event.values[SensorManager.DATA_Z]; orientationView.setText("Orientation: " + x + ", " + y + ", " + z); } //得到加速度的值 else if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) { float x = event.values[SensorManager.DATA_X]; float y = event.values[SensorManager.DATA_Y]; float z = event.values[SensorManager.DATA_Z]; accelerometerView.setText("Accelerometer: " + x + ", " + y + ", " + z); } } //重写变化 @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } //暂停传感器的捕获 @Override protected void onPause() { sensorManager.unregisterListener(sensorEventListener); super.onPause(); } }


相关文章:

  • css实现文字两端对齐
  • jQuery高性能自己定义滚动栏美化插件
  • Visual Code中的智能提示
  • 什么是ODBC ?
  • Perfect or Good Enough – 关于测试程度的一些探讨
  • 得到存储过程中最后拼接出来的语句
  • python 同时打开两个文件以及打开文件的基本操作
  • open_basedir restriction in effect,解决php引入文件权限问题
  • Android应用完全退出的几种方法
  • 【AHOI2005】病毒检测
  • 数据挖掘 - 算法 - ID3 - 转自 http://www.cnblogs.com/dztgc/archive/2013/04/22/3036529.html
  • asp.net MVC html.ActionLink的几种参数格式
  • jquery获取元素各种宽高及页面宽高总结
  • c# AOP 文章地址
  • Android中悬浮窗口的实现
  • 2017-09-12 前端日报
  • Angular 响应式表单 基础例子
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • C++类中的特殊成员函数
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES学习笔记(12)--Symbol
  • Java比较器对数组,集合排序
  • Lsb图片隐写
  • pdf文件如何在线转换为jpg图片
  • sessionStorage和localStorage
  • Theano - 导数
  • 百度小程序遇到的问题
  • 给Prometheus造假数据的方法
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 面试总结JavaScript篇
  • 你不可错过的前端面试题(一)
  • 试着探索高并发下的系统架构面貌
  • 一天一个设计模式之JS实现——适配器模式
  • nb
  • ​Java并发新构件之Exchanger
  • ​卜东波研究员:高观点下的少儿计算思维
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #《AI中文版》V3 第 1 章 概述
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (11)MSP430F5529 定时器B
  • (办公)springboot配置aop处理请求.
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET6实现破解Modbus poll点表配置文件
  • .Net程序帮助文档制作
  • .NET程序员迈向卓越的必由之路
  • .net的socket示例
  • .sdf和.msp文件读取
  • @RequestMapping-占位符映射
  • []error LNK2001: unresolved external symbol _m
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标