Android中判斷手機是否支持傳感器,可以通過SensorManager這個類來獲取手機所有的傳感器列表,如下代碼:
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比共和網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式共和網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋共和地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
package com.example.testsensor;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class DemoSensorActivity extends Activity {
private Button button;
private TextView show;
private SensorManager sm;
private StringBuffer str;
private ListSensor allSensors;
private Sensor s;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button);
show = (TextView) findViewById(R.id.show);
button.setOnClickListener(new ButtonListener());
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
allSensors = sm.getSensorList(Sensor.TYPE_ALL);// 獲得傳感器列表
}
class ButtonListener implements OnClickListener {
public void onClick(View v) {
str = new StringBuffer();
str.append("該手機有" + allSensors.size() + "個傳感器,分別是:\n");
for (int i = 0; i allSensors.size(); i++) {
s = allSensors.get(i);
switch (s.getType()) {
case Sensor.TYPE_ACCELEROMETER:
str.append(i + "加速度傳感器");
break;
case Sensor.TYPE_GYROSCOPE:
str.append(i + "陀螺儀傳感器");
break;
case Sensor.TYPE_LIGHT:
str.append(i + "環(huán)境光線傳感器");
break;
case Sensor.TYPE_MAGNETIC_FIELD:
str.append(i + "電磁場傳感器");
break;
case Sensor.TYPE_ORIENTATION:
str.append(i + "方向傳感器");
break;
case Sensor.TYPE_PRESSURE:
str.append(i + "壓力傳感器");
break;
case Sensor.TYPE_PROXIMITY:
str.append(i + "距離傳感器");
break;
case Sensor.TYPE_TEMPERATURE:
str.append(i + "溫度傳感器");
break;
default:
str.append(i + "未知傳感器");
break;
}
}
show.setText(str);
}
}
}
一 介紹Sensor類
SDK只有一句介紹“Class representing a sensor. Use getSensorList(int) to get the list of available Sensors.”,表示一個感應器的類,可以使用getSensorList方法(此方法屬于接下來要講的SensorManager)獲得所有可用的感應器,該方法返回的是一個ListSensor
下面的列表顯示了,Sensor所提供的所有服務
----------------------------------------------------------------------------------------------------------------------------------------------------------
Constants
int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. //三軸加速度感應器 返回三個坐標軸的加速度 單位m/s2
int TYPE_ALL A constant describing all sensor types. //用于列出所有感應器
int TYPE_GRAVITY A constant describing a gravity sensor type. //重力感應器
int TYPE_GYROSCOPE A constant describing a gyroscope sensor type //陀螺儀 可判斷方向 返回三個坐標軸上的角度
int TYPE_LIGHT A constant describing an light sensor type. //光線感應器 單位 lux 勒克斯
int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type. //線性加速度
int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type. //磁場感應 返回三個坐標軸的數(shù)值 微特斯拉
int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation() instead. //方向感應器 已過時 可以使用方法獲得
int TYPE_PRESSURE A constant describing a pressure sensor type //壓力感應器 單位 千帕斯卡
int TYPE_PROXIMITY A constant describing an proximity sensor type. //距離傳感器
int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type. //翻轉(zhuǎn)傳感器
int TYPE_TEMPERATURE A constant describing a temperature sensor type //溫度傳感器 單位 攝氏度
----------------------------------------------------------------------------------------------------------------------------------------------------------
此類中包含的方法都是get型的 用來獲取所選sensor的一些屬性,sensor類一般不需要new而是通過SensorManager的方法獲得
二 介紹SensorManager類
SDK解釋:“SensorManager lets you access the device's sensors. Get an instance of this class by calling Context.getSystemService() with the argument SENSOR_SERVICE.
Always make sure to disable sensors you don't need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off. ”
SensorManager 允許你訪問設備的感應器。通過傳入?yún)?shù)SENSOR_SERVICE參數(shù)調(diào)用Context.getSystemService方法可以獲得一個sensor的實例。永遠記得確保當你不需要的時候,特別是Activity暫定的時候,要關(guān)閉感應器。忽略這一點肯能導致幾個小時就耗盡電池,注意當屏幕關(guān)閉時,系統(tǒng)不會自動關(guān)閉感應器。
三 常用的感應器
(1) 加速度感應器
可以通過這個感應器獲得三個浮點型
x-axis
y-axis
z-axis
X Y Z分別對應values[0]到[2]
X表示左右移動的加速度
Y表示前后移動的加速度
Z表示垂直方向的加速度
下面先看一個基本的獲取加速的demo,希望大家好好注意代碼中的注釋
做的很簡單,就是在屏幕上顯示三個方向上加速度的值
Android手機自帶光線傳感器,通常我們手機的屏幕自動亮度都是用光線傳感器來實現(xiàn)的。該傳感器在前置攝像頭附近,此外,還有一個距離傳感器。本文主要講解如何使用Android手機的光線傳感器。
獲得感應器服務
Android開發(fā)中要使用光線傳感器,需要先獲得系統(tǒng)傳感器服務Context.SENSOR_SERVICE,獲得方法如下:
SensorManager senserManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
獲得光線傳感器
SensorManager是系統(tǒng)傳感器服務,是系統(tǒng)所有傳感器的管理器。通過它,我們獲得制定類型的傳感器,獲得光線傳感器的方法如下:
詳細代碼
目前 Android 設備支持的傳感器類型如下:
TYPE_ACCELEROMETER 加速度傳感器又叫 G-sensor,該數(shù)值包含地心引力的影響,單位是 m/s2,測量應用于設備 x 、y、z 軸上的加速度。
將手機平放在桌面上,x 軸默認為0,y 軸默認0,z 軸默認9.81。
將手機朝下放在桌面上,z 軸為-9.81。
將手機向左傾斜,x 軸為正值。
將手機向右傾斜,x 軸為負值。
將手機向上傾斜,y 軸為負值。
將手機向下傾斜,y 軸為正值。
TYPE_AMBIENT_TEMPERATURE 溫度傳感器,單位是 ℃,返回當前的溫度。
TYPE_GAME_ROTATION_VECTOR 用來探測運動而不必受到電磁干擾的影響,因為它并不依賴于磁北極。
TYPE_GEOMAGNETIC_ROTATION_VECTOR 地磁旋轉(zhuǎn)矢量傳感器,提供手機的旋轉(zhuǎn)矢量,當手機處于休眠狀態(tài)時,仍可以記錄設備的方位。
TYPE_GRAVITY 重力傳感器簡稱 GV-sensor,單位是 $m/s^2%,測量應用于設備X、Y、Z軸上的重力。在地球上,重力數(shù)值為9.8,
TYPE_GYROSCOPE 陀螺儀傳感器叫做Gyro-sensor,返回x、y、z三軸的角加速度數(shù)據(jù)。單位是 radians/second。
TYPE_GYROSCOPE_UNCALIBRATED 未校準陀螺儀傳感器,提供原始的、未校準、補償?shù)耐勇輧x數(shù)據(jù),用于后期處理和融合定位數(shù)據(jù)。
TYPE_LIGHT 光線感應傳感器檢測實時的光線強度,光強單位是lux,其物理意義是照射到單位面積上的光通量。
TYPE_LINEAR_ACCELERATION 線性加速度傳感器簡稱LA-sensor。線性加速度傳感器是加速度傳感器減去重力影響獲取的數(shù)據(jù)。單位是 m/s2。
TYPE_MAGNETIC_FIELD 磁力傳感器簡稱為M-sensor,返回 x、y、z 三軸的環(huán)境磁場數(shù)據(jù)。該數(shù)值的單位是微特斯拉(micro-Tesla),用uT表示。單位也可以是高斯(Gauss),1Tesla=10000Gauss。硬件上一般沒有獨立的磁力傳感器,磁力數(shù)據(jù)由電子羅盤傳感器提供(E-compass)。電子羅盤傳感器同時提供方向傳感器數(shù)據(jù)。
TYPE_MAGNETIC_FIELD_UNCALIBRATED 未校準磁力傳感器,提供原始的、未校準的磁場數(shù)據(jù)。
TYPE_ORIENTATION 方向傳感器簡稱為O-sensor,返回三軸的角度數(shù)據(jù),方向數(shù)據(jù)的單位是角度。為了得到精確的角度數(shù)據(jù),E-compass 需要獲取 G-sensor 的數(shù)據(jù),經(jīng)過計算生產(chǎn) O-sensor 數(shù)據(jù),否則只能獲取水平方向的角度。方向傳感器提供三個數(shù)據(jù),分別為azimuth、pitch和roll:
azimuth: 方位,返回水平時磁北極和 Y 軸的夾角,范圍為0°至360°。0°為北,90°為東,180°為南,270°為西。
pitch: x 軸和水平面的夾角,范圍為-180°至180°。當 z 軸向 y 軸轉(zhuǎn)動時,角度為正值。
roll: y 軸和水平面的夾角,由于歷史原因,范圍為-90°至90°。當 x 軸向 z 軸移動時,角度為正值。
TYPE_PRESSURE 壓力傳感器,單位是hPa(百帕斯卡),返回當前環(huán)境下的壓強。
TYPE_PROXIMITY 接近傳感器檢測物體與手機的距離,單位是厘米。一些接近傳感器只能返回遠和近兩個狀態(tài),因此,接近傳感器將最大距離返回遠狀態(tài),小于最大距離返回近狀態(tài)。
TYPE_RELATIVE_HUMIDITY 濕度傳感器,單位是 %,來測量周圍環(huán)境的相對濕度。
TYPE_ROTATION_VECTOR 旋轉(zhuǎn)矢量傳感器簡稱RV-sensor。旋轉(zhuǎn)矢量代表設備的方向,是一個將坐標軸和角度混合計算得到的數(shù)據(jù)。RV-sensor輸出三個數(shù)據(jù):
x*sin(theta/2)
y*sin(theta/2)
z*sin(theta/2)
sin(theta/2)是 RV 的數(shù)量級。RV 的方向與軸旋轉(zhuǎn)的方向相同。RV 的三個數(shù)值,與cos(theta/2)組成一個四元組。
TYPE_SIGNIFICANT_MOTION 特殊動作觸發(fā)傳感器。
TYPE_STEP_COUNTER 計步傳感器,用于記錄激活后的步伐數(shù)。
TYPE_STEP_DETECTOR 步行檢測傳感器,用戶每走一步就觸發(fā)一次事件。
TYPE_TEMPERATURE 溫度傳感器,目前已被TYPE_AMBIENT_TEMPERATURE替代。
精度還可以的。
傳感器是一種檢測裝置,能感受到被測量的信息,并能將感受到的信息,按一定規(guī)律變換成為電信號或其他所需形式的信息輸出,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。
傳感器的特點包括:微型化、數(shù)字化、智能化、多功能化、系統(tǒng)化、網(wǎng)絡化。它是實現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)。傳感器的存在和發(fā)展,讓物體有了觸覺、味覺和嗅覺等感官,讓物體慢慢變得活了起來。通常根據(jù)其基本感知功能分為熱敏元件、光敏元件、氣敏元件、力敏元件、磁敏元件、濕敏元件、聲敏元件、放射線敏感元件、色敏元件和味敏元件等十大類。
名稱欄目:android傳感器,android傳感器高級編程 下載
文章起源:http://vcdvsql.cn/article40/dsdiceo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、移動網(wǎng)站建設、做網(wǎng)站、商城網(wǎng)站、網(wǎng)站設計、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)