(转)Android开发--常用的传感器总结
-
随着手机的发展,现在各大手机支持的传感器类型也越来越多,在开发中利用传感器进行某些操作令人们有一种耳目一新的感觉,例如微信中的摇一摇,以及手机音乐播放器中的摇一摇切歌。今天来简单介绍下Android中传感器的使用以及一些常用的传感器。
一、传感器的使用
1.首先我们需要获得传感器管理对象:通过 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
2.为SensorManager对象添加监听事件,通过SensorManage的registerListener方法可以为我们的传感器添加监听事件,该方法有多种重载形式,一般我们必须要提供一个listener对象并实现SensorEventListener接口,然后是传感器的类型(int类型值),或一个传感器Sensor对象(通过getDefaultSensor可以得到一个sensor对象)。
在SensorEventListener接口中有两个重要的方法,
1)public void onAccuracyChanged(Sensor sensor, int degree),当传感器的精准度发生改变时被调用,degree为新的传感器精度。
2)public void onSensorChanged(SensorEvent event),传感器信息改变时执行该方法,其中event对象中的values成员中包含了我们所需要的传感器的重要信息,这是一个float数组值,一般根据传感器类型不同,该值也会不同,下面我会来介绍一下一些常用的传感器类型的values值得含义。一般我们在该方法中根据所获得的传感器信息来处理自己的事情。
3.当我们不需要监听传感器时,通过一个unregisterListener方法来销毁注册。
二、常用传感器类型介绍
在前面我们已经知道SensorEvent中的values是一个获取传感器信息的重要变量,接下来就来介绍一些常用传感器的values含义。
沿手机屏幕横向为x轴,向右为正;沿手机屏幕竖向为y轴,向上为正;垂直手机屏幕方向为z轴,向外为正。
1.Sensor.TYPE_ACCELEROMETER:加速度感应传感器
values[0]:x轴方向的重力加速度。
values[1]:y轴方向的重力加速度。
values[2]:z轴方向的重力加速度。
2.Sensor.TYPE_GYROSCOPE: 陀螺仪传感器
values[0]:沿x轴旋转的角速度。
values[1]:沿y轴旋转的角速度。
values[2]:沿z轴旋转的角速度。
3.Sensor.TYPE_ORIENTATION:方向传感器
旋转向量代表设备的结合的方向角和轴的设备通过一个角θ绕轴旋转< x,y,z >。
values[0]:手机绕着z轴旋转的角度。0表示北(North);90表示东(East);180表示南(South);270表示西(West)。如果手机是水平放置,表示手机的正前方与正北方向的夹角就是该值。
values[1]:手机绕着x轴旋转的角度。取值范围是-180到+180度之间。
values[2]:手机绕着y轴旋转的角度。取值范围是-90到+90度之间。
4.Sensor.TYPE_LIGHT:光线传感器
values[0]:环境光水平勒克斯单位值。
5.Sensor.TYPE_PRESSURE:压力传感器
values[0]:大气压力值,单位帕。
6.Sensor.TYPE_PROXIMITY: 近程感应器
values[0]:以厘米为单位的距离值。
7.Sensor.TYPE_RELATIVE_HUMIDITY:湿度传感器
values[0]: 周围空气相对湿度百分比。
8.Sensor.TYPE_TEMPERATURE: 温度传感器
values[0]: 周围环境温度的摄氏度值。
Android API中共定义了十几种传感器的类型,每一部手机不可能支持所有的传感器类型,当通过getDefaultSensor方法返回值为null时表示该手机不支持这种类型的传感器,当我们为不支持的传感器注册了监听事件,并不会引发异常,只是不能得到任何有效的数据。
三、实践加速度传感器实现摇一摇功能
接下来,我们通过代码来模拟一个摇一摇的功能,主要是通过加速度感应器来实现,当触发事件时,我们调用手机振动器,并一个Toast显示。调用手机震动提示时需要为我们的app添加权限。
1<uses-permission android:name="android.permission.VIBRATE"></uses-permission>接下来是我们的代码部分
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108packagecom.example.shaketest;importandroid.app.Activity;importandroid.content.Context;importandroid.hardware.Sensor;importandroid.hardware.SensorEvent;importandroid.hardware.SensorEventListener;importandroid.hardware.SensorManager;importandroid.os.Bundle;importandroid.os.Vibrator;importandroid.util.Log;importandroid.view.Menu;importandroid.widget.Toast;publicclassMainActivityextendsActivity {privateSensorManager mSensorManager;// 传感器管理类privateVibrator mVibrator;// 振动器privatestaticfinalString TAG ="MainActivity";@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);// 获得手机振动器}@OverrideprotectedvoidonPause() {// TODO Auto-generated method stubsuper.onPause();if(mSensorManager !=null) {mSensorManager.unregisterListener(mySensorListener);}}@OverrideprotectedvoidonResume() {// TODO Auto-generated method stubsuper.onResume();if(mSensorManager !=null) {// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率mSensorManager.registerListener(mySensorListener,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);// SensorManager.SENSOR_DELAY_NORMAL:默认的获得传感器数据的速度。// SensorManager.SENSOR_DELAY_GAME:如果利用传感器开发游戏,建议使用该值。// SensorManager.SENSOR_DELAY_UI:如果使用传感器更新UI中的数据,建议使用该值。}}privateSensorEventListener mySensorListener =newSensorEventListener() {@OverridepublicvoidonAccuracyChanged(Sensor sensor,intdegree) {// TODO Auto-generated method stub// 当传感器的精准度发生改变时被调用,int为新的传感器精度}@OverridepublicvoidonSensorChanged(SensorEvent event) {// TODO Auto-generated method stub// 传感器信息改变时执行该方法float[] values = event.values;// 该变量最多只有3个元素,而且根据传感器的不同,values变量中元素所代表的含义也不同。floatx = values[0];// x轴方向的重力加速度floaty = values[1];// y轴方向的重力加速度floatz = values[2];// z轴方向的重力加速度// 设定重力加速度值,当摇晃到达该值时触发震动,并相应自己的事件intmedumValue =19;if(Math.abs(x) > medumValue) {mVibrator.vibrate(500);Log.w(TAG,"x_shake");Log.w(TAG,"x轴::"+ x +";y轴::"+ y +";z轴::"+ z);Toast.makeText(MainActivity.this,"Shaking!!!!",Toast.LENGTH_SHORT).show();}if(Math.abs(y) > medumValue) {mVibrator.vibrate(500);Log.w(TAG,"y_shake");Log.w(TAG,"x轴::"+ x +";y轴::"+ y +";z轴::"+ z);Toast.makeText(MainActivity.this,"Shaking!!!!",Toast.LENGTH_SHORT).show();}if(Math.abs(z) > medumValue) {mVibrator.vibrate(500);Log.w(TAG,"z_shake");Log.w(TAG,"x轴::"+ x +";y轴::"+ y +";z轴::"+ z);Toast.makeText(MainActivity.this,"Shaking!!!!",Toast.LENGTH_SHORT).show();}}};@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);returntrue;}}摘自:http://www.2cto.com/kf/201502/375063.html
(转)Android开发--常用的传感器总结的更多相关文章
- Android开发常用工具汇总
Android开发常用工具汇总,本文章不断更新完善 一.数据库小工具Sqlite Developer SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的, ...
- 转发—Android开发常用的插件及工具
作者:蓝之风 出处:http://www.cnblogs.com/vaiyanzi/ Android开发常用的插件及工具 1.GitHub,这个不管是做安卓还是其他,只要是开发就必上的网站,也是天朝没 ...
- 36个Android开发常用代码片段
//36个Android开发常用代码片段 //拨打电话 public static void call(Context context, String phoneNumber) { context.s ...
- Android开发常用开源框架:图片处理
https://blog.csdn.net/SGQ_CSDN/article/details/79910709 Android开发常用开源框架:图片处理 框架名称 功能描述 Android Unive ...
- Android开发常用工具类
来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前 ...
- Android开发10:传感器器及地图相关应用
前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...
- 最全Android开发常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括 HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.Pack ...
- Android开发常用网站汇总
1.eoe Android开发者论坛 目前国内最早的Android开发者社区,人气非常旺聚集了不少Android开发方面的高手,开发中遇到的问题大都能在这里获得解决,网站最大的特色是定期发布<e ...
- Android 开发常用工具合集
在 Android 开发中经常使用到的小功能,用于记录开发的那些事^_^ 1. 获取 release 和 debug 版本的 SHA1 public static String getSHA1(Con ...
随机推荐
- Linux7关闭防火墙
RedHat Enterprise Linux 7关闭防火墙方法 在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop ...
- java如何调用接口
其实对于java调用接口进行获取对方服务器的数据在开发中特别常见,然而一些常用的基础的知识总是掌握不牢,让人容易忘记,写下来闲的时候看看,比回想总会好一些. 总体而言,一些东西知识点一直复制粘贴容易依 ...
- 工作队列work queues 公平分发(fair dispatch) And 消息应答与消息持久化
生产者 package cn.wh.work; import cn.wh.util.RabbitMqConnectionUtil; import com.rabbitmq.client.Channel ...
- ASCII_01
1.来自“http://baike.baidu.com/link?url=WgFPtGe-rT6x6X0r_OiHGVZAV87Fu4_P5fvr7FsGyrm8QqTGuvVUfg4Jx7Rn-Le ...
- Go语言 channel 管道 阻塞 死锁 经典问题
建议阅读:14.2协程间的信道 问题:为什么代码1会报死锁的错误,而代码2不会报错? 代码1: package main import ( "fmt" ) func main() ...
- mysql数据库(三):查询的其他用法
一. 查询—IN的用法 语法:select ... from 表名 where 字段 a in (值b, 值c, 值d...) 等价于 select ... from 表名 where 字段a=值b ...
- request获取路径方式
从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPath("./&q ...
- IOS-CoreLocation
一.简介 在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入 ...
- 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-J】 强迫症的序列
小A是一个中度强迫症患者,每次做数组有关的题目都异常难受,他十分希望数组的每一个元素都一样大,这样子看起来才是最棒的,所以他决定通过一些操作把这个变成一个看起来不难受的数组,但他又想不要和之前的那个数 ...
- ARM体系结构总结
特殊功能寄存器与外设绑定,通用寄存器是与CPU绑定. ARM是RISC架构 常用ARM汇编指令只有二三十条 ARM是低功耗CPU ARM的架构非常适合单片机.嵌入式.尤其是物联网领域:而服务器等高性能 ...