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添加权限。

<uses-permission android:name="android.permission.VIBRATE" />

接下来是我们的代码部分

package com.example.shaketest;

import android.app.Activity;
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.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

	private SensorManager mSensorManager;// 传感器管理类
	private Vibrator mVibrator;// 振动器

	private static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
		mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);// 获得手机振动器
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		if (mSensorManager != null) {
			mSensorManager.unregisterListener(mySensorListener);
		}
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.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中的数据,建议使用该值。

		}
	}

	private SensorEventListener mySensorListener = new SensorEventListener() {

		@Override
		public void onAccuracyChanged(Sensor sensor, int degree) {
			// TODO Auto-generated method stub
			// 当传感器的精准度发生改变时被调用,int为新的传感器精度
		}

		@Override
		public void onSensorChanged(SensorEvent event) {
			// TODO Auto-generated method stub
			// 传感器信息改变时执行该方法
			float[] values = event.values;
			// 该变量最多只有3个元素,而且根据传感器的不同,values变量中元素所代表的含义也不同。
			float x = values[0]; // x轴方向的重力加速度
			float y = values[1]; // y轴方向的重力加速度
			float z = values[2]; // z轴方向的重力加速度
			// 设定重力加速度值,当摇晃到达该值时触发震动,并相应自己的事件
			int medumValue = 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();
			}
		}

	};

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

时间: 2024-10-27 07:59:15

Android开发--常用的传感器总结的相关文章

(转)Android开发--常用的传感器总结

随着手机的发展,现在各大手机支持的传感器类型也越来越多,在开发中利用传感器进行某些操作令人们有一种耳目一新的感觉,例如微信中的摇一摇,以及手机音乐播放器中的摇一摇切歌.今天来简单介绍下Android中传感器的使用以及一些常用的传感器. 一.传感器的使用 1.首先我们需要获得传感器管理对象:通过 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 2.为SensorManager对象添加监听事件,通过

Android开发之方向传感器的使用? (2011-10-13 20:56:05)转载▼

Android开发之方向传感器的使用 (2011-10-13 20:56:05) 转载▼ 标签: android 传感器 方向 指南针 杂谈 分类: 3GAndroid学习笔记 Android中的方向传感器在生活中是一个很好的应用,典型的例子是指南针的使用,我们先来简单介绍一下传感器中三个参数x,y,z的含义,以一幅图来说明.                                      图 1 补充说明:图中的坐标轴x,y,z和传感器中的X,Y,Z没有任何联系! 如上图所示,绿色部

[转载]Android开发常用调试技术记录

ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/27/status      #status 文件表明了获知这个进程的相关信息. #stat包含更多信息,但较难读. cat /proc/27/task      #task 文件表明了进程信息. 2)vmstat 查看虚拟内存统计信息 3)top 统计CPU的消耗情况 4)dumpstat  du

android开发常用组件和第三方库(二)

TimLiu-Android 自己总结的Android开源项目及库. github排名 https://github.com/trending, github搜索:https://github.com/search 目录 UI UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其它 动画 网络相关 响应式编程 地图 数据库 图像浏览及处理 视频音频处理 测试及调试 动态更新热更新 消息推送 完整项目 插件 出名框架 其他 好的文章 收集android上开源的酷炫的交互动

Android开发常用工具类

来源于http://www.open-open.com/lib/view/open1416535785398.html 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括  HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.PackageUtils. PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils. ParcelUtils.Rand

Android开发常用流行开源框架记录

发掘了一些Android常用开源框架,记录并分享,希望能在开发当中帮到大家. 缓存: 名称:DiskLruCache 描述:Java实现基于LRU的硬盘缓存 源码地址(可能需要翻墙) 作者:guolin 相关博客:Android DiskLruCache完全解析,硬盘缓存的最佳方案 图片加载: Android-Universal-Image-Loader 描述:一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨

20个Android开发常用工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括  HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.S

最全Android开发常用工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java. 目前包括  HttpUtils.DownloadManagerPro.Safe.ijiami.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.S

Android开发常用工具总结

目录: 什么是AIDL以及如何使用 获取总内存及可用内存 dp.px转换 程序的安装与卸载 根据URI获取真实路径 关闭开启网络 还原短信 横竖屏切换 获取mac地址 获取SD卡状态 获取状态栏和标题栏的高度 获取各种窗体高度 获取内外置存储卡路径 捕获Application全局异常 禁止Home键 开机启动 控制对话框位置 模拟器错误 挪动dialog的位置 屏幕适配 设置APN 调节屏幕亮度 重启 拍照.录音.录像 隐藏软键盘 隐藏以及显示软键盘以及不自动弹出键盘的方法 BitMap.Dra