![Android傳感器專題培訓(xùn)課件_第1頁(yè)](http://file4.renrendoc.com/view/7fe7f48798065fd746498f06f1ede2a3/7fe7f48798065fd746498f06f1ede2a31.gif)
![Android傳感器專題培訓(xùn)課件_第2頁(yè)](http://file4.renrendoc.com/view/7fe7f48798065fd746498f06f1ede2a3/7fe7f48798065fd746498f06f1ede2a32.gif)
![Android傳感器專題培訓(xùn)課件_第3頁(yè)](http://file4.renrendoc.com/view/7fe7f48798065fd746498f06f1ede2a3/7fe7f48798065fd746498f06f1ede2a33.gif)
![Android傳感器專題培訓(xùn)課件_第4頁(yè)](http://file4.renrendoc.com/view/7fe7f48798065fd746498f06f1ede2a3/7fe7f48798065fd746498f06f1ede2a34.gif)
![Android傳感器專題培訓(xùn)課件_第5頁(yè)](http://file4.renrendoc.com/view/7fe7f48798065fd746498f06f1ede2a3/7fe7f48798065fd746498f06f1ede2a35.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android傳感器Android傳感器1android硬件傳感器Android傳感器,分別包括加速度傳感器(accelerometer),陀螺儀(gyroscope),環(huán)境光照傳感器(light),磁力傳感器(magneticfield),方向傳感器(orientation),壓力傳感器(pressure),距離傳感器(proximity)和溫度傳感器(temperature)。從Android1.5開(kāi)始,系統(tǒng)內(nèi)置了對(duì)多達(dá)八種傳感器的支持,利用這些傳感器我們可以制作出各種有趣的應(yīng)用程序和游戲。在Android應(yīng)用程序中使用傳感器要依賴于android.hardware.SensorEventListener接口。通過(guò)該接口可以監(jiān)聽(tīng)傳感器的各種事件。
android硬件傳感器Android傳感器,分別包括加速度2android硬件傳感器傳感器類型常量 內(nèi)部整數(shù)值 中文名稱Sensor.TYPE_ACCELEROMETER 1 加速度傳感器Sensor.TYPE_MAGNETIC_FIELD 2 磁力傳感器Sensor.TYPE_ORIENTATION 3 方向傳感器Sensor.TYPE_GYROSCOPE 4 陀螺儀傳感器Sensor.TYPE_LIGHT 5 環(huán)境光照傳感器Sensor.TYPE_PRESSURE 6 壓力傳感器Sensor.TYPE_TEMPERATURE 7 溫度傳感器Sensor.TYPE_PROXIMITY 8 距離傳感器android硬件傳感器傳感器類型常量 內(nèi)部整數(shù)值 中文名稱3android硬件傳感器從傳感器管理器中獲取其中某個(gè)或者某些傳感器的方法有如下三種:第一種:獲取某種傳感器的默認(rèn)傳感器SensordefaultGyroscope=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);第二種:獲取某種傳感器的列表List<Sensor>pressureSensors=sensorManager.getSensorList(Sensor.TYPE_PRESSURE);第三種:獲取所有傳感器的列表,List<Sensor>allSensors=sensorManager.getSensorList(Sensor.TYPE_ALL);android硬件傳感器從傳感器管理器中獲取其中某個(gè)或者某些4android硬件傳感器對(duì)于某一個(gè)傳感器,它的一些具體信息的獲取方法可以見(jiàn)下表:方法描述getMaximumRange()最大取值范圍getName()設(shè)備名稱getPower()功率getResolution()精度getType()傳感器類型getVentor()設(shè)備供應(yīng)商getVersion()設(shè)備版本號(hào)android硬件傳感器對(duì)于某一個(gè)傳感器,它的一些具體信息的5android硬件傳感器SensorEventListener接口的代碼如下:packageandroid.hardware;publicinterfaceSensorEventListener{publicvoidonSensorChanged(SensorEventevent);publicvoidonAccuracyChanged(Sensorsensor,intaccuracy);}在SensorEventListener接口中定義了兩個(gè)方法:onSensorChanged和onAccuracyChanged。當(dāng)傳感器的值發(fā)生變化時(shí),例如磁阻傳感器的方向改變時(shí)會(huì)調(diào)用onSensorChanged方法。當(dāng)傳感器的精度變化時(shí)會(huì)調(diào)用onAccuracyChanged方法。android硬件傳感器SensorEventListene6android硬件傳感器onSensorChanged方法只有一個(gè)SensorEvent類型的參數(shù)event,其中SensorEvent類有一個(gè)values變量非常重要,該變量的類型是float[]。但該變量最多只有3個(gè)元素,而且根據(jù)傳感器的不同,values變量中元素所代表的含義也不同。在解釋values變量中元素的含義之前,先來(lái)介紹一下Android的坐標(biāo)系統(tǒng)是如何定義X、Y、Z軸的。X軸的方向是沿著屏幕的水平方向從左向右。如果手機(jī)不是正方形的話,較短的邊需要水平放置,較長(zhǎng)的邊需要垂直放置。
Y軸的方向是從屏幕的左下角開(kāi)始沿著屏幕的垂直方向指向屏幕的頂端。
將手機(jī)平放在桌子上,Z軸的方向是從手機(jī)里指向天空。android硬件傳感器onSensorChanged方法只71.1方向傳感器
在方向傳感器中values變量的3個(gè)值都表示度數(shù),它們的含義如下:values[0]:該值表示方位,也就是手機(jī)繞著Z軸旋轉(zhuǎn)的角度。0表示北(North);90表示東(East);180表示南(South);270表示西(West)。如果values[0]的值正好是這4個(gè)值,并且手機(jī)是水平放置,表示手機(jī)的正前方就是這4個(gè)方向。可以利用這個(gè)特性來(lái)實(shí)現(xiàn)電子羅盤(pán)。values[1]:該值表示傾斜度,或手機(jī)翹起的程度。當(dāng)手機(jī)繞著X軸傾斜時(shí)該值發(fā)生變化。values[1]的取值范圍是-180≤values[1]
≤180。假設(shè)將手機(jī)屏幕朝上水平放在桌子上,這時(shí)如果桌子是完全水平的,values[1]的值應(yīng)該是0。(由于很少有桌子是絕對(duì)水平的,因此,該值很可能不為0,但一般都是-5和5之間的某個(gè)值)1.1方向傳感器在方向傳感器中values變量的3個(gè)值都表81.1方向傳感器
這時(shí)從手機(jī)頂部開(kāi)始抬起,直到將手機(jī)沿X軸旋轉(zhuǎn)180度(屏幕向下水平放在桌面上)。在這個(gè)旋轉(zhuǎn)過(guò)程中,values[1]會(huì)在0到-180之間變化,也就是說(shuō),從手機(jī)頂部抬起時(shí),values[1]的值會(huì)逐漸變小,直到等于-180。如果從手機(jī)底部開(kāi)始抬起,直到將手機(jī)沿X軸旋轉(zhuǎn)180度,這時(shí)values[1]會(huì)在0到180之間變化。也就是values[1]的值會(huì)逐漸增大,直到等于180??梢岳胿alues[1]和下面要介紹的values[2]來(lái)測(cè)量桌子等物體的傾斜度。values[2]:表示手機(jī)沿著Y軸的滾動(dòng)角度。取值范圍是-90≤values[2]≤90。假設(shè)將手機(jī)屏幕朝上水平放在桌面上,這時(shí)如果桌面是平的,values[2]的值應(yīng)為0。將手機(jī)左側(cè)逐漸抬起時(shí),values[2]的值逐漸變小,直到手機(jī)垂直于桌面放置,這時(shí)values[2]的值是-90。將手機(jī)右側(cè)逐漸抬起時(shí),values[2]的值逐漸增大,直到手機(jī)垂直于桌面放置,這時(shí)values[2]的值是90。在垂直位置時(shí)繼續(xù)向右或向左滾動(dòng),values[2]的值會(huì)繼續(xù)在-90至90之間變化。1.1方向傳感器這時(shí)從手機(jī)頂部開(kāi)始抬起,直到將手機(jī)沿X軸旋91.2加速傳感器
該傳感器的values變量的3個(gè)元素值分別表示X、Y、Z軸的加速值。例如,水平放在桌面上的手機(jī)從左側(cè)向右側(cè)移動(dòng),values[0]為負(fù)值;從右向左移動(dòng),values[0]為正值。要想使用相應(yīng)的傳感器,僅實(shí)現(xiàn)SensorEventListener接口是不夠的,還需要使用下面的代碼來(lái)注冊(cè)相應(yīng)的傳感器。//獲得傳感器管理器SensorManagersm=(SensorManager)getSystemService(SENSOR_SERVICE);//注冊(cè)方向傳感器sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);1.2加速傳感器該傳感器的values變量的3個(gè)元素值分別101.2加速傳感器
如果想注冊(cè)其他的傳感器,可以改變getDefaultSensor方法的第1個(gè)參數(shù)值,例如,注冊(cè)加速傳感器可以使用Sensor.TYPE_ACCELEROMETER。在Sensor類中還定義了很多傳感器常量,但要根據(jù)手機(jī)中實(shí)際的硬件配置來(lái)注冊(cè)傳感器。如果手機(jī)中沒(méi)有相應(yīng)的傳感器硬件,就算注冊(cè)了相應(yīng)的傳感器也不起任何作用。getDefaultSensor方法的第2個(gè)參數(shù)表示獲得傳感器數(shù)據(jù)的速度。SensorManager.SENSOR_DELAY_FASTEST表示盡可能快地獲得傳感器數(shù)據(jù)。除了該值以外,還可以設(shè)置3個(gè)獲得傳感器數(shù)據(jù)的速度值,這些值如下:
SENSOR_DELAY_FASTEST:以最快的速度獲得傳感器數(shù)據(jù)。
SENSOR_DELAY_GAME:適合于在游戲中獲得傳感器數(shù)據(jù)。SENSOR_DELAY_UI:適合于在UI控件中獲得傳感器數(shù)據(jù)。
SENSOR_DELAY_NORMAL:以一般的速度獲得傳感器的數(shù)據(jù)上面四種類型獲得傳感器數(shù)據(jù)的速度依次遞減。從理論上說(shuō),獲得傳感器數(shù)據(jù)的速度越快,消耗的系統(tǒng)資源越大。因此建議讀者根本實(shí)際情況選擇適當(dāng)?shù)乃俣全@得傳感器的數(shù)據(jù)。1.2加速傳感器如果想注冊(cè)其他的傳感器,可以改變getDe111.3重力感應(yīng)器
重力傳感器的類型常量是Sensor.TYPE_GRAVITY。重力傳感器與加速度傳感器使用同一套坐標(biāo)系。values數(shù)組中三個(gè)元素分別表示了X、Y、Z軸的重力大小。AndroidSDK定義了一些常量,用于表示星系中行星、衛(wèi)星和太陽(yáng)表面的重力。下面就來(lái)溫習(xí)一下天文知識(shí),將來(lái)如果在地球以外用Android手機(jī),也許會(huì)用得上。publicstaticfinalfloatGRAVITY_SUN=275.0f;publicstaticfinalfloatGRAVITY_MERCURY=3.70f;publicstaticfinalfloatGRAVITY_VENUS=8.87f;publicstaticfinalfloatGRAVITY_EARTH=9.80665f;publicstaticfinalfloatGRAVITY_MOON=1.6f;publicstaticfinalfloatGRAVITY_MARS=3.71f;publicstaticfinalfloatGRAVITY_JUPITER=23.12f;publicstaticfinalfloatGRAVITY_SATURN=8.96f;publicstaticfinalfloatGRAVITY_URANUS=8.69f;publicstaticfinalfloatGRAVITY_NEPTUNE=11.0f;1.3重力感應(yīng)器重力傳感器的類型常量是Sensor.TYP121.4光線傳感器
光線傳感器的類型常量是Sensor.TYPE_LIGHT。values數(shù)組只有第一個(gè)元素(values[0])有意義。表示光線的強(qiáng)度。最大的值是120000.0f。AndroidSDK將光線強(qiáng)度分為不同的等級(jí),每一個(gè)等級(jí)的最大值由一個(gè)常量表示,這些常量都定義在SensorManager類中,代碼如下:publicstaticfinalfloatLIGHT_SUNLIGHT_MAX=120000.0f;publicstaticfinalfloatLIGHT_SUNLIGHT=110000.0f;publicstaticfinalfloatLIGHT_SHADE=20000.0f;publicstaticfinalfloatLIGHT_OVERCAST=10000.0f;publicstaticfinalfloatLIGHT_SUNRISE=400.0f;publicstaticfinalfloatLIGHT_CLOUDY=100.0f;publicstaticfinalfloatLIGHT_FULLMOON=0.25f;publicstaticfinalfloatLIGHT_NO_MOON=0.001f;上面的八個(gè)常量只是臨界值。讀者在實(shí)際使用光線傳感器時(shí)要根據(jù)實(shí)際情況確定一個(gè)范圍。例如,當(dāng)太陽(yáng)逐漸升起時(shí),values[0]的值很可能會(huì)超過(guò)LIGHT_SUNRISE,當(dāng)values[0]的值逐漸增大時(shí),就會(huì)逐漸越過(guò)LIGHT_OVERCAST,而達(dá)到LIGHT_SHADE,當(dāng)然,如果天特別好的話,也可能會(huì)達(dá)到LIGHT_SUNLIGHT,甚至更高。1.4光線傳感器光線傳感器的類型常量是Sensor.TY131.5陀螺儀傳感器
陀螺儀傳感器的類型常量是Sensor.TYPE_GYROSCOPE。values數(shù)組的三個(gè)元素表示的含義如下:values[0]:延X(jué)軸旋轉(zhuǎn)的角速度。
values[1]:延Y軸旋轉(zhuǎn)的角速度。
values[2]:延Z軸旋轉(zhuǎn)的角速度。
當(dāng)手機(jī)逆時(shí)針旋轉(zhuǎn)時(shí),角速度為正值,順時(shí)針旋轉(zhuǎn)時(shí),角速度為負(fù)值。陀螺儀傳感器經(jīng)常被用來(lái)計(jì)算手機(jī)已轉(zhuǎn)動(dòng)的角度,代碼如下:privatestaticfinalfloatNS2S=1.0f/1000000000.0f;privatefloattimestamp;publicvoidonSensorChanged(SensorEventevent){if(timestamp!=0){1.5陀螺儀傳感器陀螺儀傳感器的類型常量是Sensor.T141.5陀螺儀傳感器
{//event.timesamp表示當(dāng)前的時(shí)間,單位是納秒(1百萬(wàn)分之一毫秒)
finalfloatdT=(event.timestamp-timestamp)*NS2S;angle[0]+=event.values[0]*dT;angle[1]+=event.values[1]*dT;angle[2]+=event.values[2]*dT;}timestamp=event.timestamp;}上面代碼中通過(guò)陀螺儀傳感器相鄰兩次獲得數(shù)據(jù)的時(shí)間差(dT)來(lái)分別計(jì)算在這段時(shí)間內(nèi)手機(jī)延X(jué)、Y、Z軸旋轉(zhuǎn)的角度,并將值分別累加到angle數(shù)組的不同元素上。1.5陀螺儀傳感器{151.6其他傳感器
在前面幾節(jié)介紹了加速度傳感器、重力傳感器、光線傳感器、陀螺儀傳感器以及方向傳感器。除了這些傳感器外,AndroidSDK還支持如下的幾種傳感器。關(guān)于這些傳感器的使用方法以及與這些傳感器相關(guān)的常量、方法,讀者可以參閱官方文檔。近程傳感器(Sensor.TYPE_PROXIMITY)
線性加速度傳感器(Sensor.TYPE_LINEAR_ACCELERATION)
旋轉(zhuǎn)向量傳感器(Sensor.TYPE_ROTATION_VECTOR)
磁場(chǎng)傳感器(Sensor.TYPE_MAGNETIC_FIELD)
壓力傳感器(Sensor.TYPE_PRESSURE)
溫度傳感器(Sensor.TYPE_TEMPERATURE)雖然AndroidSDK定義了十多種傳感器,但并不是每一部手機(jī)都完全支持這些傳感器。例如,GoogleNexusS支持其中的9種傳感器(不支持壓力和溫度傳感器),而HTCG7只支持其中的5種傳感器。如果使用了手機(jī)不支持的傳感器,一般不會(huì)拋出異常,但也無(wú)法獲得傳感器傳回的數(shù)據(jù)。讀者在使用傳感器時(shí)最好先判斷當(dāng)前的手機(jī)是否支持所使用的傳感器。1.6其他傳感器在前面幾節(jié)介紹了加速度傳感器、重力傳感器、16傳感器的相關(guān)類庫(kù)測(cè)試手機(jī)中有哪些傳感器我們可以通過(guò)如下三步使用傳感器。
(1)編寫(xiě)一個(gè)截獲傳感器事件的類。該類必須實(shí)現(xiàn)android.hardware.SensorEventListener接口。
(2)獲得傳感器管理對(duì)象(SensorManager對(duì)象)。
(3)使用SensorManager.registerListener方法注冊(cè)指定的傳感器。通過(guò)上面三步已經(jīng)搭建了傳感器應(yīng)用程序的框架。而具體的工作需要在SensorEventListener接口的onSensorChanged和onAccuracyChanged方法中完成。傳感器的相關(guān)類庫(kù)測(cè)試手機(jī)中有哪些傳感器17傳感器的相關(guān)類庫(kù)SensorManager對(duì)象通過(guò)getSystemService方法獲得,代碼如下:SensorManagersensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
通常手機(jī)中包含了若干個(gè)傳感器模塊(如方向傳感器、光線傳感器等),因此,注冊(cè)傳感器需要指定傳感器的類型,如下面的代碼注冊(cè)了光線傳感器。sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_FASTEST);registerListener方法有三個(gè)參數(shù)。第1個(gè)參數(shù)是實(shí)現(xiàn)SensorEventListener接口的對(duì)象。第2個(gè)參數(shù)用于指定傳感器的類型。AndroidSDK預(yù)先定義了表示各種傳感器的常量,這些常量都被放在Sensor類中。第3個(gè)參數(shù)表示傳感器獲得數(shù)據(jù)的速度。如果想停止獲得傳感器數(shù)據(jù),可以使用unregisterSensor方法注銷傳感器事件對(duì)象。unregisterSensor方法的定義如下:publicvoidunregisterListener(SensorEventListenerlistener)
傳感器的相關(guān)類庫(kù)SensorManager對(duì)象通過(guò)getSy18傳感器的相關(guān)類庫(kù)unregisterSensor方法有兩個(gè)重載形式。第一個(gè)重載形式用于注銷所有的傳感器對(duì)象。第二個(gè)重載形式用于注銷指定傳感器的事件對(duì)象。其中Sensor對(duì)象通過(guò)SensorManager.getDefaultSensor方法獲得。getDefaultSensor方法只有一個(gè)int類型的參數(shù),表示傳感器的類型。如Sensor.TYPE_LIGHT表示光線傳感器。注意:一個(gè)傳感器對(duì)像可以處理多個(gè)傳感器。也就是說(shuō),一個(gè)實(shí)現(xiàn)SensorEventListener接口的類可以接收多個(gè)傳感器傳回的數(shù)據(jù)。為了區(qū)分不同的傳感器,需要使用Sensor.getType方法來(lái)獲得傳感器的類型。傳感器的相關(guān)類庫(kù)unregisterSensor方法有兩個(gè)重19傳感器的相關(guān)類庫(kù)通過(guò)SensorManager.getSensorList方法可以獲得指定傳感器的信息,也可以獲得手機(jī)支持的所有傳感器的信息,代碼如下//獲得光線傳感器List<Sensor>sensors=sensorManager.getSensorList(Sensor.TYPE_LIGHT);//獲得手機(jī)支持的所有傳感器List<Sensor>sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);傳感器的相關(guān)類庫(kù)通過(guò)SensorManager.getSen20傳感器實(shí)例下面給出一個(gè)完整的例子來(lái)演示如何獲得傳感器傳回的數(shù)據(jù)。本例從如下4個(gè)傳感器獲得數(shù)據(jù),同時(shí)輸出了測(cè)試手機(jī)中支持的所有傳感器名稱。
加速度傳感器(Sensor.TYPE_ACCELEROMETER)
磁場(chǎng)傳感器(Sensor.TYPE_MAGNETIC_FIELD)
光線傳感器(Sensor.TYPE_LIGHT)
方向傳感器(TYPE_ORIENTATION)
本例需要在真機(jī)上運(yùn)行。由于不同的手機(jī)可能支持的傳感器不同(有的手機(jī)并不支持AndroidSDK中定義的所有傳感器),因此,如果運(yùn)行程序后,無(wú)法顯示某個(gè)傳感器的數(shù)據(jù),說(shuō)明當(dāng)前的手機(jī)并不支持這個(gè)傳感器。傳感器實(shí)例下面給出一個(gè)完整的例子來(lái)演示如何獲得傳感器傳回的數(shù)21傳感器實(shí)例packagemobile.android.sensor;importjava.util.List;importandroid.app.Activity;importandroid.hardware.Sensor;importandroid.hardware.SensorEvent;importandroid.hardware.SensorEventListener;importandroid.hardware.SensorManager;importandroid.os.Bundle;importandroid.widget.TextView;publicclassMainextendsActivityimplementsSensorEventListener{privateTextViewtvAccelerometer;privateTextViewtvMagentic;privateTextViewtvLight;privateTextViewtvOrientation;privateTextViewtvSensors;傳感器實(shí)例packagemobile.android.s22傳感器實(shí)例@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//獲得SensorManager對(duì)象
SensorManagersensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);//注冊(cè)加速度傳感器
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_FASTEST);//注冊(cè)磁場(chǎng)傳感器
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_FASTEST);傳感器實(shí)例@Override23傳感器實(shí)例//注冊(cè)光線傳感器
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),SensorManager.SENSOR_DELAY_FASTEST);//注冊(cè)方向傳感器
sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);tvAccelerometer=(TextView)findViewById(R.id.tvAccelerometer);tvMagentic=(TextView)findViewById(R.id.tvMagentic);tvLight=(TextView)findViewById(R.id.tvLight);tvOrientation=(TextView)findViewById(R.id.tvOrientation);tvSensors=(TextView)findViewById(R.id.tvSensors);傳感器實(shí)例//注冊(cè)光線傳感器24傳感器實(shí)例//獲得當(dāng)前手機(jī)支持的所有傳感器
List<Sensor>sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);for(Sensorsensor:sensors){//輸出當(dāng)前傳感器的名稱
tvSensors.append(sensor.getName()+"\n");}}@OverridepublicvoidonSensorChanged(SensorEventevent){//通過(guò)getType方法獲得當(dāng)前傳回?cái)?shù)據(jù)的傳感器類型
switch(event.sensor.getType()){傳感器實(shí)例//獲得當(dāng)前手機(jī)支持的所有傳感器25傳感器實(shí)例caseSensor.TYPE_ACCELEROMETER://處理加速度傳感器傳回的數(shù)據(jù)
Stringaccelerometer="加速度\n"+"X:"+event.values[0]+"\n"+"Y:"+event.values[1]+"\n"+"Z:"+event.values[2]+"\n";tvAccelerometer.setText(accelerometer);break;caseSensor.TYPE_LIGHT://處理光線傳感器傳回的數(shù)據(jù)
tvLight.setText("亮度:"+event.values[0]);break;caseSensor.TYPE_MAGNETIC_FIELD://處理磁場(chǎng)傳感器傳回的數(shù)據(jù)
Stringmagentic="磁場(chǎng)\n"+"X:"+event.values[0]+"\n"+"Y:"+event.values[1]+"\n"+"Z:"+event.values[2]+"\n";tvMagentic.setText(magentic);break;
傳感器實(shí)例caseSensor.TYPE_ACCELER26傳感器實(shí)例電子羅盤(pán)實(shí)例。電子羅盤(pán)又叫電子指南針。其中N、S、W和E分別表示北、南、西和東4個(gè)方向。本例只使用了onSensorChanged事件方法及values[0]。由于指南針圖像上方是北,當(dāng)手機(jī)前方是正北時(shí)(values[0]=0),圖像不需要旋轉(zhuǎn)。但如果不是正北,就需要將圖像按一定角度旋轉(zhuǎn)。假設(shè)當(dāng)前values[0]的值是60,說(shuō)明方向在東北方向。也就是說(shuō),手機(jī)頂部由北向東旋轉(zhuǎn)。這時(shí)如果圖像不旋轉(zhuǎn),N的方向正好和正北的夾角是60度,需要將圖像逆時(shí)針(從東向北旋轉(zhuǎn))旋轉(zhuǎn)60度,N才會(huì)指向正北方。傳感器實(shí)例電子羅盤(pán)實(shí)例。電子羅盤(pán)又叫電子指南針。其中N、S27傳感器實(shí)例publicvoidonSensorChanged(SensorEventevent){if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){floatdegree=event.values[0];//以指南針圖像中心為軸逆時(shí)針旋轉(zhuǎn)degree度
RotateAnimationra=newRotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//在200毫秒之內(nèi)完成旋轉(zhuǎn)動(dòng)作
ra.setDuration(200);傳感器實(shí)例publicvoidonSensorChang28傳感器實(shí)例//開(kāi)始旋轉(zhuǎn)圖像
imageView.startAnimation(ra);//保存旋轉(zhuǎn)后的度數(shù),currentDegree是一個(gè)在類中定義的float類型變量
currentDegree=-degree;}}上面的代碼中使用了event.values數(shù)組中的數(shù)據(jù)來(lái)獲得傳感器傳回的數(shù)據(jù)。這個(gè)values數(shù)組非常重要,它的長(zhǎng)度為3。但不一定每一個(gè)數(shù)組元素都有意義。對(duì)于不同的傳感器,每個(gè)數(shù)組元素的含義不同。注意:雖然使用Sensor.TYPE_ALL可以獲得手機(jī)支持的所有傳感器信息,但不能使用Sensor.TYPE_ALL注冊(cè)所有的傳感器,也就是getDefaultSensor方法的參數(shù)值必須是某個(gè)傳感器的類型常量,而不能是Sensor.TYPE_ALL。傳感器實(shí)例//開(kāi)始旋轉(zhuǎn)圖像29傳感器實(shí)例計(jì)步器實(shí)例。還可以利用方向傳感器做出更有趣的應(yīng)用,例如利用values[1]或values[2]的變化實(shí)現(xiàn)一個(gè)計(jì)步器。由于人在走路時(shí)會(huì)上下振動(dòng),因此,可以通過(guò)判斷values[1]或values[2]中值的振蕩變化進(jìn)行計(jì)步。基本原理是在onSensorChanged方法中計(jì)算兩次獲得values[1]值的差,并根據(jù)差值在一定范圍之外開(kāi)始計(jì)數(shù)。傳感器實(shí)例計(jì)步器實(shí)例。30傳感器實(shí)例publicvoidonSensorChanged(SensorEventevent){if(flag){lastPoint=event.values[1];flag=false;}//當(dāng)兩個(gè)values[1]值之差的絕對(duì)值大于8時(shí)認(rèn)為走了一步
if(Math.abs(event.values[1]-lastPoint)>8){//保存最后一步時(shí)的values[1]的峰值
lastPoint=event.values[1];//將當(dāng)前計(jì)數(shù)顯示在TextView組件中
textView.setText(String.valueOf(++count));}}傳感器實(shí)例publicvoidonSensorChang31傳感器實(shí)例本例設(shè)置3個(gè)按鈕用于控制計(jì)步的狀態(tài),這3個(gè)按鈕可以控制開(kāi)始計(jì)步、重值(將計(jì)步數(shù)清0)和停止計(jì)步。這3個(gè)按鈕的單擊事件代碼如下publicvoidonClick(Viewview){Stringmsg="";switch(view.getId()){//開(kāi)始計(jì)步
caseR.id.btnStart:sm=(SensorManager)getSystemService(SENSOR_SERVICE);//注冊(cè)方向傳感器
sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);
msg="已經(jīng)開(kāi)始計(jì)步器.";break;傳感器實(shí)例本例設(shè)置3個(gè)按鈕用于控制計(jì)步的狀態(tài),這3個(gè)按鈕可以32傳感器實(shí)例//重置計(jì)步器
caseR.id.btnReset:count=0;msg="已經(jīng)重置計(jì)步器.";break;//停止計(jì)步
caseR.id.btnStop://注銷方向傳感器
sm.unregisterListener(this);count=0;msg="已經(jīng)停止計(jì)步器.";break;}textView.setText(String.valueOf(count));Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();}運(yùn)行本例后,單擊【開(kāi)始】按鈕,將手機(jī)放在兜里,再走兩步看看。傳感器實(shí)例//重置計(jì)步器33傳感器實(shí)例錄音器實(shí)例。通過(guò)上面的例子我們學(xué)會(huì)了如何獲得某種類型的傳感器,下面我通過(guò)一個(gè)實(shí)例來(lái)學(xué)會(huì)如何使用某一個(gè)類型的傳感器。我們這里使用加速度傳感器來(lái)實(shí)現(xiàn)這樣一個(gè)功能:開(kāi)啟我們的錄音程序放在你的口袋或者提包里,需要錄音的時(shí)候把衣服整理一下,或者把提包挪動(dòng)個(gè)位置,那么此時(shí)手機(jī)就會(huì)感受到變化從而開(kāi)始錄音。由此達(dá)到神不知鬼不覺(jué)的錄音效果。說(shuō)起來(lái)似乎有點(diǎn)神,其實(shí)做起來(lái)很簡(jiǎn)單,讓我們開(kāi)始吧。傳感器實(shí)例錄音器實(shí)例。34傳感器實(shí)例publicclassMainActivityextendsActivity{
//錄音和停止按鈕privateButtonrecordButton;privateButtonstopButton;
//檢測(cè)搖動(dòng)相關(guān)變量privatelonginitTime=0;privatelonglastTime=0;privatelongcurTime=0;privatelongduration=0;privatefloatlast_x=0.0f;privatefloatlast_y=0.0f;privatefloatlast_z=0.0f;privatefloatshake=0.0f;privatefloattotalShake=0.0f;傳感器實(shí)例publicclassMainActivity35傳感器實(shí)例//媒體錄音器對(duì)象privateMediaRecordermr;//是否正在錄音privatebooleanisRecoding=false;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//UI組件recordButton=(Button)this.findViewById(R.id.Button01);stopButton=(Button)this.findViewById(R.id.Button02);finalTextViewtx1=(TextView)this.findViewById(R.id.TextView01);//錄音按鈕點(diǎn)擊事件recordButton.setOnClickListener(newView.OnClickListener(){傳感器實(shí)例//媒體錄音器對(duì)象36傳感器實(shí)例@OverridepublicvoidonClick(Viewv){//如果沒(méi)有在錄音,那么點(diǎn)擊按鈕可以開(kāi)始錄音if(!isRecoding){startRecord();}}});//停止按鈕點(diǎn)擊事件stopButton.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){initShake();//如果正在錄音,那么可以停止錄音if(mr!=null){mr.stop();mr.release();mr=null;recordButton.setText("錄音");傳感器實(shí)例@Override37傳感器實(shí)例Toast.makeText(getApplicationContext(),"錄音完畢",Toast.LENGTH_LONG).show();isRecoding=false;}}});//獲取傳感器管理器SensorManagersm=(SensorManager)getSystemService(Context.SENSOR_SERVICE);//獲取加速度傳感器SensoracceleromererSensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//定義傳感器事件監(jiān)聽(tīng)器SensorEventListeneracceleromererListener=newSensorEventListener(){@OverridepublicvoidonAccuracyChanged(Sensorsensor,intaccuracy){}//傳感器數(shù)據(jù)變動(dòng)事件@OverridepublicvoidonSensorChanged(SensorEventevent){傳感器實(shí)例Toast.makeText(getApplica38傳感器實(shí)例//如果沒(méi)有開(kāi)始錄音的話可以監(jiān)聽(tīng)是否有搖動(dòng)事件,如果有搖動(dòng)事件可以開(kāi)始錄音if(!isRecoding){//獲取加速度傳感器的三個(gè)參數(shù)floatx=event.values[SensorManager.DATA_X];floaty=event.values[SensorManager.DATA_Y];floatz=event.values[SensorManager.DATA_Z];//獲取當(dāng)前時(shí)刻的毫秒數(shù)curTime=System.currentTimeMillis();//100毫秒檢測(cè)一次if((curTime-lastTime)>100){duration=(curTime-lastTime);//看是不是剛開(kāi)始晃動(dòng)if(last_x==0.0f&&last_y==0.0f&&last_z==0.0f){//last_x、last_y、last_z同時(shí)為0時(shí),表示剛剛開(kāi)始記錄initTime=System.currentTimeMillis();傳感器實(shí)例//如果沒(méi)有開(kāi)始錄音的話可以監(jiān)聽(tīng)是否有搖動(dòng)事件,如39傳感器實(shí)例}else{//單次晃動(dòng)幅度shake=(Math.abs(x-last_x)+Math.abs(y-last_y)+Math.abs(z-last_z))/duration*100;}//把每次的晃動(dòng)幅度相加,得到總體晃動(dòng)幅度totalShake+=shake;//判斷是否為搖動(dòng),這是我自己寫(xiě)的標(biāo)準(zhǔn),不準(zhǔn)確,只是用來(lái)做教學(xué)示例,別誤會(huì)了^_^if(totalShake>10&&totalShake/(curTime-initTime)*1000>10){startRecord();initShake();}tx1.setText("總體晃動(dòng)幅度="+totalShake+"\n平均晃動(dòng)幅度="+totalShake/(curTime-initTime)*1000);}傳感器實(shí)例}else{40傳感器實(shí)例last_x=x;last_y=y;last_z=z;lastTime=curTime;}}};//在傳感器管理器中注冊(cè)監(jiān)聽(tīng)器sm.registerListener(acceleromererListener,acceleromererSensor,SensorManager.SENSOR_DELAY_NORMAL);}//開(kāi)始錄音publicvoidstartRecord(){//把正在錄音的標(biāo)志設(shè)為真isRecoding=true;//存放文件Filefile=newFile("/sdcard/"+"YY"+newDateFormat().format("yyyyMMdd_hhmmss",Calendar.getInstance(Locale.CHINA))+".amr");傳感器實(shí)例last_x=x;41傳感器實(shí)例Toast.makeText(getApplicationContext(),"正在錄音,錄音文件在"+file.getAbsolutePath(),Toast.LENGTH_LONG).show();//創(chuàng)建錄音對(duì)象mr=newMediaRecorder();//從麥克風(fēng)源進(jìn)行錄音mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);//設(shè)置輸出格式mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);//設(shè)置編碼格式mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//設(shè)置輸出文件mr.setOutputFile(file.getAbsolutePath());try{//創(chuàng)建文件file.createNewFile();//準(zhǔn)備錄制mr.prepare();傳感器實(shí)例Toast.makeText(getApplica42傳感器實(shí)例}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//開(kāi)始錄制mr.start();recordButton.setText("錄音中……");}//搖動(dòng)初始化publicvoidinitShake(){lastTime=0;duration=0;curTime=0;initTime=0;last_x=0.0f;last_y=0.0f;last_z=0.0f;shake=0.0f;totalShake=0.0f;}}傳感器實(shí)例}catch(IllegalStateExce43傳感器實(shí)例微信的搖一搖功能在搖動(dòng)手機(jī)的功能中,我們只用加速度傳感器就行了。加速度傳感器返回值的單位是加速度的單位m/s^2(米每二次方秒),有三個(gè)方向的值分別是
values[0]:x-axis方向加速度
values[1]:y-axis方向加速度
values[2]:z-axis方向加速度
其中x,y,z方向的定義是以水平放置在的手機(jī)的右下腳為參照系坐標(biāo)原點(diǎn)
x方向就是手機(jī)的水平方向,右為正
y方向就是手機(jī)的水平垂直方向,前為正
y方向就是手機(jī)的空間垂直方向,天空的方向?yàn)檎?,地球的方向?yàn)樨?fù)
所以說(shuō),你的手機(jī)放置的空間位置不同,它三個(gè)方向的加速度也不同。在這里,三個(gè)方向的加速度,與我們傳統(tǒng)意義上的加速度(9.8m/s2)有所區(qū)別,需細(xì)細(xì)品味。傳感器實(shí)例微信的搖一搖功能44傳感器實(shí)例//需要實(shí)現(xiàn)SensorEventListener接口publicclassLoversChoiseextendsActivityimplementsSensorEventListener{
Buttonclear;
//定義sensor管理器
privateSensorManagermSensorManager;
//震動(dòng)
privateVibratorvibrator;
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.loverschoise);
//獲取傳感器管理服務(wù)
mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
傳感器實(shí)例//需要實(shí)現(xiàn)SensorEventListener45傳感器實(shí)例
//震動(dòng)
vibrator=(Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
clear=(Button)findViewById(R.id.clear);
clear.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//點(diǎn)擊button后,給button按鈕設(shè)置了text
clear.setText("現(xiàn)在給button的text賦值嘍~");
});@OverrideprotectedvoidonResume(){super.onResume();
//加速度傳感器mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);}
傳感器實(shí)例
//震動(dòng)
vibr46傳感器實(shí)例@OverrideprotectedvoidonStop(){mSensorManager.unregisterListener(this);super.onStop();}
@OverrideprotectedvoidonPause(){mSensorManager.unregisterListener(this);super.onPause();}
@OverridepublicvoidonAccuracyChanged(Sensorsensor,intaccuracy){//TODOAuto-generatedmethodstub//當(dāng)傳感器精度改變時(shí)回調(diào)該方法,Donothing.}傳感器實(shí)例@Override47傳感器實(shí)例@OverridepublicvoidonSensorChanged(SensorEventevent){//TODOAuto-generatedmethodstubintsensorType=event.sensor.getType();//values[0]:X軸,values[1]:Y軸,values[2]:Z軸float[]values=event.values;if(sensorType==Sensor.TYPE_ACCELEROMETER){
/*因?yàn)橐话阏G闆r下,任意軸數(shù)值最大就在9.8~10之間,只有在你突然搖動(dòng)手機(jī)*的時(shí)候,瞬時(shí)加速度才會(huì)突然增大或減少。*所以,經(jīng)過(guò)實(shí)際測(cè)試,只需監(jiān)聽(tīng)任一軸的加速度大于14的時(shí)候,改變你需要的設(shè)置*就OK了~~~*/傳感器實(shí)例@Override48傳感器實(shí)例if((Math.abs(values[0])>14||Math.abs(values[1])>14||Math.abs(values[2])>14)){
//搖動(dòng)手機(jī)后,設(shè)置button上顯示的字為空clear.setText(null);
//搖動(dòng)手機(jī)后,再伴隨震動(dòng)提示~~vibrator.vibrate(500);
}}}
}傳感器實(shí)例if((Math.abs(values[0])>149Android傳感器Android傳感器50android硬件傳感器Android傳感器,分別包括加速度傳感器(accelerometer),陀螺儀(gyroscope),環(huán)境光照傳感器(light),磁力傳感器(magneticfield),方向傳感器(orientation),壓力傳感器(pressure),距離傳感器(proximity)和溫度傳感器(temperature)。從Android1.5開(kāi)始,系統(tǒng)內(nèi)置了對(duì)多達(dá)八種傳感器的支持,利用這些傳感器我們可以制作出各種有趣的應(yīng)用程序和游戲。在Android應(yīng)用程序中使用傳感器要依賴于android.hardware.SensorEventListener接口。通過(guò)該接口可以監(jiān)聽(tīng)傳感器的各種事件。
android硬件傳感器Android傳感器,分別包括加速度51android硬件傳感器傳感器類型常量 內(nèi)部整數(shù)值 中文名稱Sensor.TYPE_ACCELEROMETER 1 加速度傳感器Sensor.TYPE_MAGNETIC_FIELD 2 磁力傳感器Sensor.TYPE_ORIENTATION 3 方向傳感器Sensor.TYPE_GYROSCOPE 4 陀螺儀傳感器Sensor.TYPE_LIGHT 5 環(huán)境光照傳感器Sensor.TYPE_PRESSURE 6 壓力傳感器Sensor.TYPE_TEMPERATURE 7 溫度傳感器Sensor.TYPE_PROXIMITY 8 距離傳感器android硬件傳感器傳感器類型常量 內(nèi)部整數(shù)值 中文名稱52android硬件傳感器從傳感器管理器中獲取其中某個(gè)或者某些傳感器的方法有如下三種:第一種:獲取某種傳感器的默認(rèn)傳感器SensordefaultGyroscope=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);第二種:獲取某種傳感器的列表List<Sensor>pressureSensors=sensorManager.getSensorList(Sensor.TYPE_PRESSURE);第三種:獲取所有傳感器的列表,List<Sensor>allSensors=sensorManager.getSensorList(Sensor.TYPE_ALL);android硬件傳感器從傳感器管理器中獲取其中某個(gè)或者某些53android硬件傳感器對(duì)于某一個(gè)傳感器,它的一些具體信息的獲取方法可以見(jiàn)下表:方法描述getMaximumRange()最大取值范圍getName()設(shè)備名稱getPower()功率getResolution()精度getType()傳感器類型getVentor()設(shè)備供應(yīng)商getVersion()設(shè)備版本號(hào)android硬件傳感器對(duì)于某一個(gè)傳感器,它的一些具體信息的54android硬件傳感器SensorEventListener接口的代碼如下:packageandroid.hardware;publicinterfaceSensorEventListener{publicvoidonSensorChanged(SensorEventevent);publicvoidonAccuracyChanged(Sensorsensor,intaccuracy);}在SensorEventListener接口中定義了兩個(gè)方法:onSensorChanged和onAccuracyChanged。當(dāng)傳感器的值發(fā)生變化時(shí),例如磁阻傳感器的方向改變時(shí)會(huì)調(diào)用onSensorChanged方法。當(dāng)傳感器的精度變化時(shí)會(huì)調(diào)用onAccuracyChanged方法。android硬件傳感器SensorEventListene55android硬件傳感器onSensorChanged方法只有一個(gè)SensorEvent類型的參數(shù)event,其中SensorEvent類有一個(gè)values變量非常重要,該變量的類型是float[]。但該變量最多只有3個(gè)元素,而且根據(jù)傳感器的不同,values變量中元素所代表的含義也不同。在解釋values變量中元素的含義之前,先來(lái)介紹一下Android的坐標(biāo)系統(tǒng)是如何定義X、Y、Z軸的。X軸的方向是沿著屏幕的水平方向從左向右。如果手機(jī)不是正方形的話,較短的邊需要水平放置,較長(zhǎng)的邊需要垂直放置。
Y軸的方向是從屏幕的左下角開(kāi)始沿著屏幕的垂直方向指向屏幕的頂端。
將手機(jī)平放在桌子上,Z軸的方向是從手機(jī)里指向天空。android硬件傳感器onSensorChanged方法只561.1方向傳感器
在方向傳感器中values變量的3個(gè)值都表示度數(shù),它們的含義如下:values[0]:該值表示方位,也就是手機(jī)繞著Z軸旋轉(zhuǎn)的角度。0表示北(North);90表示東(East);180表示南(South);270表示西(West)。如果values[0]的值正好是這4個(gè)值,并且手機(jī)是水平放置,表示手機(jī)的正前方就是這4個(gè)方向。可以利用這個(gè)特性來(lái)實(shí)現(xiàn)電子羅盤(pán)。values[1]:該值表示傾斜度,或手機(jī)翹起的程度。當(dāng)手機(jī)繞著X軸傾斜時(shí)該值發(fā)生變化。values[1]的取值范圍是-180≤values[1]
≤180。假設(shè)將手機(jī)屏幕朝上水平放在桌子上,這時(shí)如果桌子是完全水平的,values[1]的值應(yīng)該是0。(由于很少有桌子是絕對(duì)水平的,因此,該值很可能不為0,但一般都是-5和5之間的某個(gè)值)1.1方向傳感器在方向傳感器中values變量的3個(gè)值都表571.1方向傳感器
這時(shí)從手機(jī)頂部開(kāi)始抬起,直到將手機(jī)沿X軸旋轉(zhuǎn)180度(屏幕向下水平放在桌面上)。在這個(gè)旋轉(zhuǎn)過(guò)程中,values[1]會(huì)在0到-180之間變化,也就是說(shuō),從手機(jī)頂部抬起時(shí),values[1]的值會(huì)逐漸變小,直到等于-180。如果從手機(jī)底部開(kāi)始抬起,直到將手機(jī)沿X軸旋轉(zhuǎn)180度,這時(shí)values[1]會(huì)在0到180之間變化。也就是values[1]的值會(huì)逐漸增大,直到等于180??梢岳胿alues[1]和下面要介紹的values[2]來(lái)測(cè)量桌子等物體的傾斜度。values[2]:表示手機(jī)沿著Y軸的滾動(dòng)角度。取值范圍是-90≤values[2]≤90。假設(shè)將手機(jī)屏幕朝上水平放在桌面上,這時(shí)如果桌面是平的,values[2]的值應(yīng)為0。將手機(jī)左側(cè)逐漸抬起時(shí),values[2]的值逐漸變小,直到手機(jī)垂直于桌面放置,這時(shí)values[2]的值是-90。將手機(jī)右側(cè)逐漸抬起時(shí),values[2]的值逐漸增大,直到手機(jī)垂直于桌面放置,這時(shí)values[2]的值是90。在垂直位置時(shí)繼續(xù)向右或向左滾動(dòng),values[2]的值會(huì)繼續(xù)在-90至90之間變化。1.1方向傳感器這時(shí)從手機(jī)頂部開(kāi)始抬起,直到將手機(jī)沿X軸旋581.2加速傳感器
該傳感器的values變量的3個(gè)元素值分別表示X、Y、Z軸的加速值。例如,水平放在桌面上的手機(jī)從左側(cè)向右側(cè)移動(dòng),values[0]為負(fù)值;從右向左移動(dòng),values[0]為正值。要想使用相應(yīng)的傳感器,僅實(shí)現(xiàn)SensorEventListener接口是不夠的,還需要使用下面的代碼來(lái)注冊(cè)相應(yīng)的傳感器。//獲得傳感器管理器SensorManagersm=(SensorManager)getSystemService(SENSOR_SERVICE);//注冊(cè)方向傳感器sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);1.2加速傳感器該傳感器的values變量的3個(gè)元素值分別591.2加速傳感器
如果想注冊(cè)其他的傳感器,可以改變getDefaultSensor方法的第1個(gè)參數(shù)值,例如,注冊(cè)加速傳感器可以使用Sensor.TYPE_ACCELEROMETER。在Sensor類中還定義了很多傳感器常量,但要根據(jù)手機(jī)中實(shí)際的硬件配置來(lái)注冊(cè)傳感器。如果手機(jī)中沒(méi)有相應(yīng)的傳感器硬件,就算注冊(cè)了相應(yīng)的傳感器也不起任何作用。getDefaultSensor方法的第2個(gè)參數(shù)表示獲得傳感器數(shù)據(jù)的速度。SensorManager.SENSOR_DELAY_FASTEST表示盡可能快地獲得傳感器數(shù)據(jù)。除了該值以外,還可以設(shè)置3個(gè)獲得傳感器數(shù)據(jù)的速度值,這些值如下:
SENSOR_DELAY_FASTEST:以最快的速度獲得傳感器數(shù)據(jù)。
SENSOR_DELAY_GAME:適合于在游戲中獲得傳感器數(shù)據(jù)。SENSOR_DELAY_UI:適合于在UI控件中獲得傳感器數(shù)據(jù)。
SENSOR_DELAY_NORMAL:以一般的速度獲得傳感器的數(shù)據(jù)上面四種類型獲得傳感器數(shù)據(jù)的速度依次遞減。從理論上說(shuō),獲得傳感器數(shù)據(jù)的速度越快,消耗的系統(tǒng)資源越大。因此建議讀者根本實(shí)際情況選擇適當(dāng)?shù)乃俣全@得傳感器的數(shù)據(jù)。1.2加速傳感器如果想注冊(cè)其他的傳感器,可以改變getDe601.3重力感應(yīng)器
重力傳感器的類型常量是Sensor.TYPE_GRAVITY。重力傳感器與加速度傳感器使用同一套坐標(biāo)系。values數(shù)組中三個(gè)元素分別表示了X、Y、Z軸的重力大小。AndroidSDK定義了一些常量,用于表示星系中行星、衛(wèi)星和太陽(yáng)表面的重力。下面就來(lái)溫習(xí)一下天文知識(shí),將來(lái)如果在地球以外用Android手機(jī),也許會(huì)用得上。publicstaticfinalfloatGRAVITY_SUN=275.0f;publicstaticfinalfloatGRAVITY_MERCURY=3.70f;publicstaticfinalfloatGRAVITY_VENUS=8.87f;publicstaticfinalfloatGRAVITY_EARTH=9.80665f;publicstaticfinalfloatGRAVITY_MOON=1.6f;publicstaticfinalfloatGRAVITY_MARS=3.71f;publicstaticfinalfloatGRAVITY_JUPITER=23.12f;publicstaticfinalfloatGRAVITY_SATURN=8.96f;publicstaticfinalfloatGRAVITY_URANUS=8.69f;publicstaticfinalfloatGRAVITY_NEPTUNE=11.0f;1.3重力感應(yīng)器重
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 7多元文化 多樣魅力《多彩的世界文化》(說(shuō)課稿)-統(tǒng)編版道德與法治六年級(jí)下冊(cè)
- 2025合同模板承包合同書(shū)(車輛)范本
- 2025中外合資公司勞動(dòng)合同協(xié)議書(shū)
- 2024年春七年級(jí)語(yǔ)文下冊(cè) 第4單元 13 葉圣陶先生二三事說(shuō)課稿 新人教版
- 《1 信息并不神秘》說(shuō)課稿-2023-2024學(xué)年華中師大版信息技術(shù)三年級(jí)上冊(cè)
- Unit 2 Expressing yourself Part A Lets spell(說(shuō)課稿)-2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)下冊(cè)001
- 2024年01月浙江2024年中國(guó)工商銀行杭州金融研修學(xué)院社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 2《學(xué)會(huì)溝通交流》第2課時(shí)說(shuō)課稿-2024-2025學(xué)年道德與法治五年級(jí)上冊(cè)統(tǒng)編版
- 以工代賑項(xiàng)目用工合同范例
- 農(nóng)業(yè)培訓(xùn)合同范例
- 如何當(dāng)好學(xué)校的中層干部
- SWITCH塞爾達(dá)傳說(shuō)曠野之息-1.6金手指127項(xiàng)修改使用說(shuō)明教程
- 2022-2023學(xué)年廣東省佛山市順德區(qū)高三(下)模擬英語(yǔ)試卷
- 節(jié)后復(fù)工培訓(xùn)內(nèi)容五篇
- GB/T 33322-2016橡膠增塑劑芳香基礦物油
- GA 1051-2013槍支彈藥專用保險(xiǎn)柜
- 某水毀公路維修工程施工方案
- 家庭病房工作制度和人員職責(zé)
- 建設(shè)工程監(jiān)理合同示范文本GF-2018-0202
- 2022質(zhì)檢年終工作總結(jié)5篇
- 江蘇省中等職業(yè)學(xué)校學(xué)業(yè)水平考試商務(wù)營(yíng)銷類(營(yíng)銷方向)技能考試測(cè)試題
評(píng)論
0/150
提交評(píng)論