Android -- 传感器使用示例, 用方向传感器做指南针
傳感器類型:方向、加速度(重力)、光線、磁場、距離(臨近性)、溫度等。
? 方向傳感器:?? Sensor.TYPE_ORIENTATION
? 加速度(重力)傳感器: Sensor.TYPE_ACCELEROMETER
? 光線傳感器:??? Sensor.TYPE_LIGHT
? 磁場傳感器:?? Sensor.TYPE_MAGNETIC_FIELD
? 距離(臨近性)傳感器: Sensor.TYPE_PROXIMITY
? 溫度傳感器:?? Sensor.TYPE_TEMPERATURE
//獲取某種類型的感應(yīng)器
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//注冊監(jiān)聽,獲取傳感器變化值
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
上面第三個參數(shù)為采樣率:最快、游戲、普通、用戶界面。當(dāng)應(yīng)用程序請求特定的采樣率時,其實只是對傳感器子系統(tǒng)的一個建議,不保證特定的采樣率可用。
最快: SensorManager.SENSOR_DELAY_FASTEST
最低延遲,一般不是特別敏感的處理不推薦使用,該種模式可能造成手機電力大量消耗,由于傳遞的為原始數(shù)據(jù),算法不處理好將會影響游戲邏輯和UI的性能。
游戲: SensorManager.SENSOR_DELAY_GAME
游戲延遲,一般絕大多數(shù)的實時性較高的游戲都使用該級別。
普通: SensorManager.SENSOR_DELAY_NORMAL
標(biāo)準(zhǔn)延遲,對于一般的益智類或EASY級別的游戲可以使用,但過低的采樣率可能對一些賽車類游戲有跳幀現(xiàn)象。
用戶界面: SensorManager.SENSOR_DELAY_UI
一般對于屏幕方向自動旋轉(zhuǎn)使用,相對節(jié)省電能和邏輯處理,一般游戲開發(fā)中我們不使用。
?
2. 示例 方向傳感器做指南針
方向傳感器 x y z 值的含義
/*x該值表示方位,0代表北(North);90代表東(East);180代表南(South);270代表西(West)
? ? 如果x值正好是這4個值之一,并且手機是水平放置,手機的頂部對準(zhǔn)的方向就是該值代表的方向。
?
? y值表示傾斜度,或手機翹起的程度。當(dāng)手機繞著X軸傾斜時該值發(fā)生變化。y值的取值范圍是-180≤y值 ≤180。
? 假設(shè)將手機屏幕朝上水平放在桌子上,這時如果桌子是完全水平的,y值應(yīng)該是0(由于很少有桌子是絕對水平的,
? 因此,該值很可能不為0,但一般都是-5和5之間的某個值)。這時從手機頂部開始抬起,直到將手機沿X軸旋轉(zhuǎn)180度(屏幕向下水平放在桌面上)。
? 在這個旋轉(zhuǎn)過程中,y值會在0到-180之間變化,也就是說,從手機頂部抬起時,y的值會逐漸變小,
? 直到等于-180。如果從手機底部開始抬起,直到將手機沿X軸旋轉(zhuǎn)180度,這時y值會在0到180之間變化。
? 也就是y值會逐漸增大,直到等于180??梢岳?/span>y值和z值來測量桌子等物體的傾斜度。
?
? z值表示手機沿著Y軸的滾動角度。表示手機沿著Y軸的滾動角度。取值范圍是-90≤z值≤90。
? 假設(shè)將手機屏幕朝上水平放在桌面上,這時如果桌面是平的,z值應(yīng)為0。將手機左側(cè)逐漸抬起時,
? z值逐漸變小,直到手機垂直于桌面放置,這時z值是-90。將手機右側(cè)逐漸抬起時,z值逐漸增大,
? 直到手機垂直于桌面放置,這時z值是90。在垂直位置時繼續(xù)向右或向左滾動,z值會繼續(xù)在-90至90之間變化。
? */
示例代碼
public class MainActivity extends Activity {private ImageView iv;private SensorManager sensorManager;private MyListener listener;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);iv = (ImageView) findViewById(R.id.iv);sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);// 獲取系統(tǒng)的方向傳感器Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);// sensorManager.getOrientation(R, values)listener = new MyListener();sensorManager.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_GAME);}private class MyListener implements SensorEventListener {float endAngle = 0;@Overridepublic void onSensorChanged(SensorEvent event) {float startAngle = event.values[0];System.out.println("角度:"+startAngle);RotateAnimation ra = new RotateAnimation(-endAngle, startAngle, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);iv.startAnimation(ra);endAngle = startAngle; //旋轉(zhuǎn)后 的角度}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}@Overrideprotected void onDestroy() {sensorManager.unregisterListener(listener);listener = null;super.onDestroy();} }
?
?
總結(jié)
以上是生活随笔為你收集整理的Android -- 传感器使用示例, 用方向传感器做指南针的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奥的斯电梯服务器自动呼梯,奥的斯外呼电梯
- 下一篇: Android传感器的使用开发、简易指南