重力球——重力感应器应用
2010-09-02 19:34
190 查看
首届 Google 暑期大学生博客分享大赛——2010 Andriod 篇
之前在网上看到一个HTC的Windows Mobile手机中的一个应用重力感应器的程序“蛋疼的小球”,地址: http://v.youku.com/v_show/id_XMTkxOTc0MDg0.html 由于最近本人正在学习Android系统开发,有点跃跃欲试的感觉,想自己也做一个。于是开始做准备工作,找素材就略过不提了。
下面开始第一步,Android中传感器的使用。
Android中有很多API可以直接调用手机中的传感器,通过这些传感器可以得到手机在真实的环境中的速度,空间位置,指向方向,光线感应,磁场,压力计以及温度等信息,获取这些信息之后,就可以做出来一些很炫很好玩的功能。
1. 首先要得到一个手机上的传感器,代码比较简单。通过这行代码我们得到一个硬件设备的控制器。
2. 通过上一步得到的硬件控制器,我们要得到想要的传感器,比如重力传感器。需要注意的是有些手机上可能不支持我们需要的传感器,那么mSensor就为null,所以为了安全起见,应该判断是否为null。
关于其中的参数,还有很多其他的类型。在官方文档中对于各个类型的说明:
由于本次只需要重力感应器,即“加速度”TYPE_ACCELEROMETER,其他的感应器本次不使用,以后会陆续试用。
[align=center] 3. 通过重力感应器的数据,我们可以知道手机的偏转度,然后才能控制小球的移动。这里对手机上X、Y、Z三维坐标系说明一下,借助网上某网友的图片说明一下。[/align]
以屏幕左下角为原点,屏幕上方为Y轴正方向,屏幕右方为X轴正方向,手机屏幕正上方为Z轴正方向,传感器返回的数据都是float型,并且正方向返回正直,反方向返回负值,范围从-10到10,所以根据这些数据和三角函数等,就可以算出手机的运动状态了。
4. 要想得到传感器的数据,就要使用监听器,当手机状态发生变化的时候,就会得到最新的数据。这就需要使用SensorEventListener了,需要重写public void onSensorChanged(SensorEvent e) 和public void onAccuracyChanged(Sensor s, int accuracy),前者是传感器的数据发生变化时所触发的事件,后者是传感器的灵敏度发生改变时触发的事件。
5. 通过上一步的代码可以很容易看出监听器的简单和方便性,下一步我们就要注册监听器,注册方法也只有一行代码。
前两个参数上面已经定义,第三个参数为传感器的灵敏度,官方文档中说灵敏度氛围四种:
SENSOR_DELAY_FASTEST 最灵敏
SENSOR_DELAY_GAME 游戏的时候用这个,灵敏度比较高
SENSOR_DELAY_NORMAL 正常一般
SENSOR_DELAY_UI 最不灵敏的一般只有横和纵
通过以上各个步骤,可以很容易得到传感器的数据,通过处理这些数据就可以进行不同的事件等等,当然这个需要开发者的大量实验和想象。暂时重力传感器就先说到这里。
之前在网上看到一个HTC的Windows Mobile手机中的一个应用重力感应器的程序“蛋疼的小球”,地址: http://v.youku.com/v_show/id_XMTkxOTc0MDg0.html 由于最近本人正在学习Android系统开发,有点跃跃欲试的感觉,想自己也做一个。于是开始做准备工作,找素材就略过不提了。
下面开始第一步,Android中传感器的使用。
Android中有很多API可以直接调用手机中的传感器,通过这些传感器可以得到手机在真实的环境中的速度,空间位置,指向方向,光线感应,磁场,压力计以及温度等信息,获取这些信息之后,就可以做出来一些很炫很好玩的功能。
1. 首先要得到一个手机上的传感器,代码比较简单。通过这行代码我们得到一个硬件设备的控制器。
SensorManager mManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2. 通过上一步得到的硬件控制器,我们要得到想要的传感器,比如重力传感器。需要注意的是有些手机上可能不支持我们需要的传感器,那么mSensor就为null,所以为了安全起见,应该判断是否为null。
Sensor mSensor = sensorMgr.getDefaultSensor(Sensor. TYPE_ACCELEROMETER);
关于其中的参数,还有很多其他的类型。在官方文档中对于各个类型的说明:
int | TYPE_ACCELEROMETER | A constant describing an accelerometer sensor type. |
int | TYPE_ALL | A constant describing all sensor types. |
int | TYPE_GYROSCOPE | A constant describing a gyroscope sensor type |
int | TYPE_LIGHT | A constant describing an light sensor type. |
int | TYPE_MAGNETIC_FIELD | A constant describing a magnetic field sensor type. |
int | TYPE_ORIENTATION | A constant describing an orientation sensor type. |
int | TYPE_PRESSURE | A constant describing a pressure sensor type. |
int | TYPE_PROXIMITY | A constant describing an proximity sensor type. |
int | TYPE_TEMPERATURE | A constant describing a temperature sensor type. |
[align=center] 3. 通过重力感应器的数据,我们可以知道手机的偏转度,然后才能控制小球的移动。这里对手机上X、Y、Z三维坐标系说明一下,借助网上某网友的图片说明一下。[/align]
以屏幕左下角为原点,屏幕上方为Y轴正方向,屏幕右方为X轴正方向,手机屏幕正上方为Z轴正方向,传感器返回的数据都是float型,并且正方向返回正直,反方向返回负值,范围从-10到10,所以根据这些数据和三角函数等,就可以算出手机的运动状态了。
4. 要想得到传感器的数据,就要使用监听器,当手机状态发生变化的时候,就会得到最新的数据。这就需要使用SensorEventListener了,需要重写public void onSensorChanged(SensorEvent e) 和public void onAccuracyChanged(Sensor s, int accuracy),前者是传感器的数据发生变化时所触发的事件,后者是传感器的灵敏度发生改变时触发的事件。
SensorEventListener listener = new SensorEventListener() { public void onSensorChanged(SensorEvent e) { x = e.values[SensorManager.DATA_X]; y = e.values[SensorManager.DATA_Y]; z = e.values[SensorManager.DATA_Z]; // do something with x, y, z }
5. 通过上一步的代码可以很容易看出监听器的简单和方便性,下一步我们就要注册监听器,注册方法也只有一行代码。
sensorMgr.registerListener(listener, mSensor, SensorManager.SENSOR_DELAY_GAME);
前两个参数上面已经定义,第三个参数为传感器的灵敏度,官方文档中说灵敏度氛围四种:
SENSOR_DELAY_FASTEST 最灵敏
SENSOR_DELAY_GAME 游戏的时候用这个,灵敏度比较高
SENSOR_DELAY_NORMAL 正常一般
SENSOR_DELAY_UI 最不灵敏的一般只有横和纵
通过以上各个步骤,可以很容易得到传感器的数据,通过处理这些数据就可以进行不同的事件等等,当然这个需要开发者的大量实验和想象。暂时重力传感器就先说到这里。
相关文章推荐
- 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画
- HTML5手机重力与方向感应的应用——摇一摇效果
- HTML5手机重力与方向感应的应用——摇一摇效果
- HTML5手机重力与方向感应的应用——摇一摇效果
- WMIC简单命令应用(3)
- .net中的WMI编程(一):WMI介绍及简单应用
- log4net 配置与应用
- 大话西游之Office应用实例系列! <6>
- 互联网最近技术应用1-互联网电视
- ASP.NET中的MVC模式应用
- CMake的应用(在vision studio2008中去掉 ALL_BUILD 和 ZERO_CHECK)
- 更新序表的应用
- 【KMP应用】HDU 1711
- Android应用开发之音乐播放器
- 动态数组的应用
- AM335X工控应用网络扩展技术详解-DM9000C
- Filter常见应用
- Android中关于AIDL的应用
- hdu 1573 X问题(中国剩余定理应用)