Android重力感应_第1页
Android重力感应_第2页
Android重力感应_第3页
Android重力感应_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、手机的感应器在Android里边所代表的类是Sensor,你只要看到在android.hardware这个包下边的都是封装的关于一些特殊的硬件方面的类,比如说Camera>Sensor之类的。一直都很怀疑为什么HTC的Google手机没有前置摄像头。怨念啊。PS:虽然是2.1的机子,但是我用的是1.5的SDK代码很简单:我们首先要得到一个手机上的传感器。Java代码1.SensorManagersensorMgr=(SensorManager)getSystemService(SENSOR_SERVICE);这行代码只要用过类似开发的都应该知道是什么。getSystemService(S

2、tringname)可以用来返回一个硬件设备的控制器。比如说LocationManage(和GPS相关用来确定位置的)、TelephonyManage(查询电话相关内容,比如说IMEI码)、AudioManager(顾名思义,是视频播放用的)等等。具体可以观看SDK文档里边Activity的讲解。http:d/app/Activity.html得到重力感应的硬件控制了,然后我们就应该得到一个Sensor了Java代码1.Sensorsensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ALL);关于这个参数。其实挺复杂的。我开始用的是TYPE_ALL,出的

3、是XYZ三条轴线的偏移量,至于其他的大家可以看下边:下边是官方SDK中对于各种类型的解析(粗体红字是我加上去的)<!-=ENUMCONSTANTSUMMARY=->Constantsintint“cl,Lr-AconstantdescribinganaccelerometersensorTYPEACCELEROMETER事母”-type.加速度Aconstantdescribingallsensortypes.所有TYPEALL类型,NexusOne默认为力口速度intTYPE_GYROSCOPEintTYPE_LIGHTAconstantdescribingagyroscopes

4、ensortype回转仪(这个不太懂)Aconstantdescribinganlightsensortype.光线感应吗-AconstantdescribingamagneticfieldsensorintTYPEMAGNETICFIELD修记yy_-type.磁场intTYPE_ORIENTATIONAconstantdescribinganorientationsensortype.定向(指北针)和角度intTYPE_PRESSUREAconstantdescribingapressuresensortype压力计intTYPE_PROXIMITYAconstantdescribinga

5、nproximitysensortype.距离?不太懂intAconstantdescribingTYPE_TEMPERATURE一褊度啦atemperaturesensortype然后就是我们需要即时了解手机的偏转度。以TYPE_ALL为例子。(其实就是TYPE_ACCELEROMETERPS:有时候你的机子并不会拥有这么全的感应装置,这个时候你应该再进行以下判断。比如说:Java代码1. Sensorsensor=sensorMgr.getDefaultSensor(Sensor.TYPE_TEMPERATURE);2.3. if(sensor=null)4. log.w("NO

6、_SERVICE","没有感应温度的感应装置。")5. .6. else7. .8. 所有最基本的三维坐标系有三个轴:X、丫和Z,这个学过矩阵或者线性代数的都应该知道吧(>_<)我当年线性代数挂了。惨不忍睹啊。后来自学DirectX的时候才觉得原来矩阵变换是这么的重要。而且更重要的是这个一点也不难吗。)关于手机的XYZ坐标,把你的手机平放到桌子上,横x,纵y,然后z就是屏幕法线。官方的例子:(直接粘贴的话空格会变小,所以就截图了)K<0x>0ft-+一>I4+r>|/z>0(towardthesliy)然后我们注册一个Li

7、stener,用来监听我们所得到的值的改变。Java代码1. SensorEventListenerlsn=newSensorEventListener()2. publicvoidonSensorChanged(SensorEvente)3. x=e.valuesSensorManager.DATA_X;4. y=e.valuesSensorManager.DATA_Y;5. z=e.valuesSensorManager.DATA_Z;6. t.setText("x="+Math.round(x*ROUND_NUMBER)+","+"y=&

8、quot;7. +Math.round(y*ROUND_NUMBER)+","+"z="8. +Math.round(z*ROUND_NUMBER);9. )10.11. publicvoidonAccuracyChanged(Sensors,intaccuracy)12. 13. ;在这里我把数字放大了,我预先定义了一个变量ROUND_NUMBER,是为了以后用来更改灵敏度的。我取的值是100o这个就简单了,我们首先声明一个SensorEvent的监听,每当它得到的值改变的时候,我就在一个TextViewt上边输出改变了的值。在这里使用TYPE_ALL

9、返回的值SensorEvent里边的values就是得到的数字。得到的values默认是一个float口。也就是说是一个float类型的数组。他在TYPE_ALL的声明下一共返回三个值,分别就是x、y、z轴的值,假如你将手机平放在水平面上,默认分别是0,0,10。(我在网上查到有的人和我得到的数字不一样,有人说是0,0,-10,关于这个我不知道是为什么,如果有人的Gphone比较多的话可以看看是怎么一回事),而当你将手机垂直立起,显示的应当是0,10,0。PS:SensorManager里边有很多的有意思的常量,比如说SensorManager.GRAVITY_EARTH是地球的重力加速度,当

10、然也有GRAVITY_MARS火星的,GRAVITY_MOON月球的,最恶搞的还有GRAVITY_DEATH_STAR_I(星球大战里的卫星武器死星I号)。还有一个GRAVITY_THE_ISLAND,这个不知道是哪里。汗。难道是岛这本书里的世界?还是Neverland?然后我们可以给Manager注册一个监听Java代码1. sensorMgr.registerListener(lsn,sensor,2. SensorManager.SENSOR_DELAY_GAME);三个参数分别是监听,感应装置,和灵敏度。灵敏度分为:SENSOR_DELAY_FASTEST最灵敏,快的然你无语SENSO

11、R_DELAY_GAME游戏的时候用这个,不过一般用这个就够了,和上一个很难看出区别(也许是我的手机CPU高?1GHz的。)SENSOR_DELAY_NORMAL比较慢。SENSOR_DELAY_UI最慢的,几乎就是横和纵的区别也许有些人想要拿这个来练练手了。比如说是现在每天播放的联通iPhone广告里有一个可以用来测量相框水平”这个广告词。但是,但是。恩恩。输出的最好还是角度比较好吧?所以我们改一改,做一个基本的LevelBar。没有什么图形界面,只是用来输出我们首先注册的Sensor应该改了。不是TYPE_ALL,而是TYPE_ORIENTATION然后剩下的基本上都一样。SensorEvent返回的values也是三个值的数组。但是,这三个值还是稍微有些不同的,如果你看了输出的值,那么就可能会明白了。首先是第一个,有些人发现就算是平放在桌面上第一个值也会变,那么,第一个值其实不是轴

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论