Android项目——传感器的使用

public class MainActivity extends Activity

{

// 定义 方向传感器 和 重力传感器

private TextView tvOrientation, tvAccelerometer;

// 定义一个传感器的管理对象

private SensorManager sensorManager;

//定义一个监听对象

private SensorEventListener sensorEventListener;

@Override

protected void onCreate(Bundle
savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tvOrientation =
(TextView) findViewById(R.id.tvOrientation);

tvAccelerometer =
(TextView) findViewById(R.id.tvAccelerometer);

// 获取传感器的 管理对象

sensorManager =
(SensorManager) getSystemService(SENSOR_SERVICE);

//获取监听器对象

sensorEventListener = new MySensorEventListener();

}

/**

* 開始一个activity 的阶段依次运行3个生命周期的方法: 各自是: onCreate,onStart,onResume方法 方向传感器:

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

* 光线传感器:Sensor.TYPE_LIGHT 磁场传感器: Sensor.TYPE_MAGNETIC_FIELD

* 距离(临近性)传感器:Sensor.TYPE_PROXIMITY 温度传感器: Sensor.TYPE_TEMPERATURE

*/

@Override

protected void onResume()

{

super.onResume();

// 获取传感器的类型(获取方向传感器)

Sensor orientationSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

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

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

最快: SensorManager.SENSOR_DELAY_FASTEST

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

游戏: SensorManager.SENSOR_DELAY_GAME

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

普通: SensorManager.SENSOR_DELAY_NORMAL

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

用户界面: SensorManager.SENSOR_DELAY_UI

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

sensorManager.registerListener(sensorEventListener,
orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);

// 获取传感器的类型(获取方向传感器)

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

sensorManager.registerListener(sensorEventListener,
accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);

}

private class MySensorEventListener implements SensorEventListener

{

@Override

public void onSensorChanged(SensorEvent
event)

{

float x
= event.values[SensorManager.DATA_X];

float y
= event.values[SensorManager.DATA_Y];

float z
= event.values[SensorManager.DATA_Z];

switch (event.sensor.getType())

{

case Sensor.TYPE_ACCELEROMETER:

tvAccelerometer.setText("Accelerometer
Sensor: " + x + ", " +
y + ", " + z);

break;

case Sensor.TYPE_ORIENTATION:

/*x该值表示方位。0代表北(North);90代表东(East);180代表南(South);270代表西(West)

假设x值正好是这4个值之中的一个。而且手机是水平放置。手机的顶部对准的方向就是该值代表的方向。

y值表示倾斜度,或手机翘起的程度。当手机绕着X轴倾斜时该值发生变化。y值的取值范围是-180≤y值 ≤180。

如果将手机屏幕朝上水平放在桌子上,这时如果桌子是全然水平的,y值应该是0(因为非常少有桌子是绝对水平的,

因此。该值非常可能不为0。但一般都是-5和5之间的某个值)。这时从手机顶部開始抬起,

直到将手机沿X轴旋转180度(屏幕向下水平放在桌面上)。

在这个旋转过程中,y值会在0到-180之间变化。也就是说。从手机顶部抬起时,y的值会逐渐变小,

直到等于-180。

假设从手机底部開始抬起。直到将手机沿X轴旋转180度,这时y值会在0到180之间变化。

也就是y值会逐渐增大,直到等于180。

能够利用y值和z值来測量桌子等物体的倾斜度。

z值表示手机沿着Y轴的滚动角度。表示手机沿着Y轴的滚动角度。取值范围是-90≤z值≤90。

如果将手机屏幕朝上水平放在桌面上,这时如果桌面是平的,z值应为0。

将手机左側逐渐抬起时,

z值逐渐变小,直到手机垂直于桌面放置。这时z值是-90。

将手机右側逐渐抬起时,z值逐渐增大,

直到手机垂直于桌面放置,这时z值是90。在垂直位置时继续向右或向左滚动,z值会继续在-90至90之间变化。

*/

tvOrientation.setText("Orientation
Sensor: " + x + ", " +
y + ", " + z);

break;

}

}

@Override

public void onAccuracyChanged(Sensor
sensor, int accuracy)

{

}

}

@Override

protected void onPause()

{

super.onPause();

//在失去焦点的时候 取消  这个传感器对象上边全部的监听器

sensorManager.unregisterListener(sensorEventListener);

}

}

时间: 2024-12-25 12:38:01

Android项目——传感器的使用的相关文章

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

Android项目实战(三十四):蓝牙4.0 BLE 多设备连接

原文:Android项目实战(三十四):蓝牙4.0 BLE 多设备连接 最近项目有个需求,手机设备连接多个蓝牙4.0 设备 并获取这些设备的数据. 查询了很多资料终于实现,现进行总结. -------------------------------------------------------------------------------------------------------------------------------------------------------------

Cocos2dx 3.0开发环境搭建--Eclipse上构建一个Android项目

一.前言: 本篇主要介绍Cocos2d-x 3.0的一些基础内容,以及在Eclipse上上编译我们的Cocos2d-x项目,成功把Helloworld运行起来了.看完本篇博客之后,你就会知道Cocos2d-x 3.0竟然发生了如此大的变化,变得如此简单,环境搭建.项目创建.编译的方式更加人性化了. 二.环境准备: 1.下载ADT Bundle(Eclipse捆绑了SDK和ADT),或者是Eclipse安装了ADT插件. 2.安装JDK.NDK.Ant .Python,然后配置环境. 3.Coco

创建一个android项目与创建一个android虚拟设备

创建一个android项目 Navigator面板区点击右键-->New-->Android Application Project,打开New Android Applicaton窗口.输入Application Name(应用程序的名称,就是显示在手机上的名称,比如:微信),Project Name(项目名称,一般显示在eclipse上的项目名称),Package Name(指定它的java包名,比如:com.qq.weixin).Minimum Required SDK表示运行应用程序所

Android项目---语言适配

android多国语言文件夹 android多国语言文件夹文件汇总如下:(有些语言的书写顺序可能跟中文是相反的) 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en-rUS 英语(英国):values-en-rGB 英文(澳大利亚):values-en-rAU 英文(加拿大):values-en-rCA 英文(爱尔兰):values-en-rIE 英文(印度):values-en-rIN

Android项目---ActivityGroup的使用

ActivityGroup在一年前已经被说明不用了,但是腾讯QQ,新浪微博上也不乏ActivityGroup的身影.所以,即使是过时的东西,也有学习的必要,当然项目中也是可以添加的.在网上找了一个博客,不过还是想自己理解一下其中的因原.http://www.cnblogs.com/answer1991/archive/2012/05/08/2489844.html mainactivity.xml <?xml version="1.0" encoding="utf-8&

&#167;1.2 Android项目结构及“Hello World”应用解析

书接上文,我们创建一个新的Android项目,进入Android Studio开发页面,如下图: 左侧为项目工具窗口,通过项目工具窗口可以管理整个项目的相关文件右侧为代码编辑区,我们可以在这里进行Android程序的开发工作底部为调试区,在调试区可以进行程序的断点调试.日志打印,可以监视整个程序的内存消耗,从而有针对性的进行性能优化. 首先,通过查看左侧的项目工具窗口区,为大家介绍一个Android项目的基本结构: 如上图所示,在这里我们只需要关注图中app目录下的内容: build目录:构建目

gradle构建android项目

工具: Android Studio2.0 gradle-2.10 一.gradle文件 当我们新建一个android项目后,Andriod Studio会自动为我们创建多个gradle文件和目录,具体内容如下: 下面我们分别对这几个目录进行分析: 二.app下的build.gradle apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" de

Android项目导入error---SoftwareTestingHomework1

一.问题及分析 在做Android项目时,不可避免的需要将现成的代码直接导入Eclipse项目中.但是在导入过程中经常会出现正常的代码现在连导入包都会出错,情况如下: 经过比对正常项目的树和不正常项目的树,如图: 不正常项目的树:                      正常项目的树:              正常的项目比不正常的项目多了一个Android2.2的包. 二.解决方案 Android右击 -> Build Path -> Configure Build Path,在侧边栏里选