編輯:關於Android編程
Android 傳感器 Android 傳感器介紹 Android SensorManager Sensor的類型 Sensor API Sensor 監聽 SensorEvent中values的x y z含義 加速度傳感器G-sensor 磁力傳感器M-sensor 方向傳感器O-sensor 陀螺儀傳感器Gyro-sensor 光線感應傳感器 壓力傳感器 溫度傳感器 距離傳感器 重力傳感器GV-sensor 線性加速度傳感器LA-sensor 旋轉矢量傳感器RV-sensor
Android的傳感器大多都跟手機的硬件有關,有些傳感器還跟手機的軟件與硬件都相關。
很多人很迷茫,什麼叫傳感器呀?其實傳感器就是一系列手機內部自帶的測量儀器。可以用來測量方向、距離、磁力、光線等等(包括你知道的和你很多不知道的)。
想要拿到手機上的傳感器管理器(SensorManager),還是需要通過Activity.getSystemService(@ServiceName @NonNull String name)
。
// 獲取傳感器管理器
SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
// 獲得全部的傳感器列表
List sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
這裡介紹主流的11種Sensor。
最大取值范圍
Sensor.getMaximumRange()
設備名稱
Sensor.getName()
功率
Sensor.getPower()
精度
Sensor.getResolution()
傳感器類型
Sensor.getType()
設備供應商
Sensor.getVentor()
設備版本號
Sensor.getVersion()
根據傳感器的Type獲取該Type默認配置的傳感器
SensorManager。getDefaultSensor(int type)
以監聽加速度傳感器為例,可以拿到傳感器測量的數據。
// 獲取默認加速度傳感器
Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
/**
* 傳感器監聽
* SensorEvent.values[0] = x
* SensorEvent.values[1] = y
* SensorEvent.values[2] = z
*/
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
String info = ;
for (int i = 0; i < event.values.length; i++) {
info += event.values[ + i + ]: + event.values[i] + ;
}
Log.i(SensorManagerActivity, info);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
// 給對應傳感器添加監聽
sensorManager.registerListener(listener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
x、y、z的值分別表示在x、y、z軸上的加速度。
這三個數值是都到地心引力的影響,單位是m/s^2。
手機平放,x軸默認為0,y軸默認0,z軸默認9.8。
向左加速運動,x軸為正值。 向右加速運動,x軸為負值。 向上加速運動,y軸為負值。 向下加速運動,y軸為正值。x、y、z的值分別表示在x、y、z軸上的環境磁場數據。
單位是微特斯拉(micro-Tesla),用uT表示。
同時也能換算成高斯(Gauss),1Tesla=10000Gauss。
x、y、z的值分別表示在x、y、z軸上的角度數據。
單位是角度。
x、y、z的值詳細的角度數據對應為:azimuth、pitch、roll。
azimuth:方位,返回水平時磁北極和Y軸的夾角,范圍為0°~360°。
0°=北,90°=東,180°=南,270°=西。
pitch:x軸和水平面的夾角,范圍為-180°~180°。
當z軸向y軸轉動時,角度為正值。
roll:y軸和水平面的夾角,范圍為-90°~90°。
當x軸向z軸移動時,角度為正值。
x、y、z的值分別表示在x、y、z軸上的角加速度數據。
單位是radians/second。
水平逆時針旋轉,z軸為正。 水平順時針旋轉,z軸為負。 水平向左旋轉,y軸為負。 水平向右旋轉,y軸為正。 水平向上旋轉,x軸為負。 水平向下旋轉,x軸為正。x值表示檢測到的實時光線強度, 范圍在0~未知(我的手機上最大可以到46000)
單位是lux,是照射到單位面積上的光通量。
光線感應傳感器主要用於Android系統的LCD自動亮度功能。
可以根據采樣到的光強數值實時調整LCD的亮度。
返回當前的壓強(目前我的手機上沒有這個傳感器 –Moto X Style)。
單位是百帕斯卡hectopascal(hPa)。
返回當前的溫度。(目前我的手機上沒有這個傳感器 –Moto X Style)。
x的值返回物體與手機屏幕的距離。范圍為0~100。
單位是厘米。
可用於接聽電話時自動關閉LCD屏幕以節省電量。
一些芯片集成了接近傳感器和光線傳感器兩者功能。
z值返回重力數據。
地球上,重力數值為9.8,單位是m/s^2。
手機平放,顯示的數據和加速度傳感器顯示的數據一樣。
線性加速度傳感器是加速度傳感器減去重力影響獲取的數據。
單位是m/s^2。
線性加速度 = 加速度 - 重力
手機平放時,重力數據又和加速數據一樣。所以此時,線性加速度的默認數據為:x=0,y=0,z=0。
這個太復雜了!建議不要去玩這個了。
旋轉矢量代表設備的方向,是一個將坐標軸和角度混合計算得到的數據。
RV-sensor輸出三個數據:
value[0] = x*sin(theta/2)
value[1] = y*sin(theta/2)
value[2] = z*sin(theta/2)
sin(theta/2)是RV的數量級。
RV的方向與軸旋轉的方向相同。
RV的三個數值,與cos(theta/2)組成一個四元組。
上篇我們講了一下的Json的解析,大家有沒有發現解析一個簡單的Json數據都寫了這麼多代碼,如果是一個復雜龐大的Json數據呢,那不得寫好多。所以谷歌推出了一款Json解
前面分析那麼多系統源碼了,也該暫停下來休息一下,趁昨晚閒著看見一個有意思的需求就操練一下分析源碼後的實例演練—-自定義控件。這個實例很適合新手入門自定義控件。先看下效果圖
本節引言: 上節我們寫了關於Xfermode與PorterDuff使用的第一個例子:圓角&圓形圖片ImageView的實現, 我們體會到了
第十七章、中介者模式 中介者模式也稱為調解者模式或調停者模式,是一種行為型模式。1.定義中介者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使它們