『壹』 如何獲取android設備所支持的感測器種類
參考如下:
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE); //獲取系襪源統的感測器服務並創建實例
List<Sensor> list = sm.getSensorList(Sensor.TYPE_ALL); //獲告侍態取感測器的集合
for (Sensor sensor:list){
tv.append(sensor.getName() + "\n"); //把感測器種類顯示在TextView中談碼
}
}
}
『貳』 android加速度感測器怎麼使用
玩游戲的時候才能感覺出來
『叄』 Android-淺談感測器
Android感測器 ,對於一般人來說會比較陌生。使用 Android 設備的小夥伴,最常見是我們手機裡面的步數記錄、指南針,這兩個功能就是通過感測器組件開發出來的。
只要在設備的硬體允許和條件支持的情況下,我們就可以通過 Android感測器 開發相應的功能需求。主要的場景有 加速度 、 室溫 、 重力 、 陀螺儀 、 運動檢測 、 心率 、 線性加速度模清 、 磁場 、 光亮 、 設備朝向 、 步伐旦手前檢測 、 靠近距離薯昌 等。
『肆』 android攝像頭加感測器——測距
首先創建一個感測器管理器,注冊一個感測器監聽器。
管理器用來管理感測器以及創建各種各樣的感測器。
監聽器用來監視感測器的變化並且進行相應的操作。
在監聽器里獲取∠a的值,在屏幕上設定此時攝像頭的高度h,使用正切函數就可以求得x啦。
當我們銀歲平躺著,手機攝像頭處於腳尖處,攝像頭對准頭頂,就可拍搏喊以測襲野出身高啦~~~一般人我不告訴Ta
項目地址:猛戳→ 測身高
『伍』 安卓下怎麼驅動加速度感測器
目前很多應用已經實現了搖一搖功能,這里通過講解該功能的原理及實現回顧一下加速度感測器的使用:
1.首先獲得感測器管理器的實例
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
2.通過感測器管理器獲得加速感測器
accelerateSensor = getSensorManager(context).getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
3.注冊加速感測器的監聽器
sensorManager.registerListener(listener, sensor, rate)
參數說明:
listener:加速感測器監聽器實例
sensor :加速感測器實例,實現搖一搖使用的是accelerateSensor
rate :感應器反應速度,有四個常量共選擇
SENSOR_DELAY_NORMAL:匹配屏幕方向型閉的變化,默認感測器速度
SENSOR_DELAY_UI:匹配用戶介面
如果更新UI建議使用SENSOR_DELAY_GAME:
匹配游戲,游戲開發建議使用SENSOR_DELAY_FASTEST.:匹配所能達到的最快
根據情況選擇,一般情況選擇第一種就可以
感測器監聽器:SensorEventListener有兩個回調方法
onSensorChanged(SensorEvent event)和onAccuracyChanged(Sensor sensor, int accuracy)
第一個是感測器值變化的相應方法
第二個是反應速度變化的相應方法
兩個方法會同時被調用
onSensorChanged(SensorEvent event) 介紹
nSensorChanged(SensorEvent event)
event的實例的values變數非常重要,根據感測器的不同,裡面的值代表的含義也不相同,以加速感測器為例:
values該變數的類型是float[]數組,最多有三個元素:
float x = values[0] 代表X軸
float y = values[1] 代表Y軸
float z = values[2] 代表Y軸
X軸的方向是沿著屏幕的水平方向從左向右。如果手機不是正方形的話,較短的邊需要水平放置遲租磨,較長的邊需要垂直放置。Y軸的方向是從屏幕的左下角開始沿著屏幕的垂直方向指向屏幕的頂端。將手機平放在桌子上,Z軸的方向是從手機里指向天空。
我們判斷手機是否搖一搖碼斗,只要x,y,z軸,達到設定的閥值時就表示搖一搖。
@Override
public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
//values[0]:X軸,values[1]:Y軸,values[2]:Z軸
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
Log.i(TAG, "x:" + x + "y:" + y + "z:" + z);
Log.i(TAG, "Math.abs(x):" + Math.abs(x) + "Math.abs(y):" +Math.abs(y) + "Math.abs(z):" + Math.abs(z));
if(sensorType == Sensor.TYPE_ACCELEROMETER){
int value = 15;//搖一搖閥值,不同手機能達到的最大值不同,如某品牌手機只能達到20
if(x >= value || x <= -value || y >= value || y <= -value || z >= value || z <= -value){
Log.i(TAG, "檢測到搖動");
//播放動畫,更新界面,並進行對應的業務操作
}
}
很早之前我寫過:
為了增強程序的健壯性,需要判斷並防止搖一搖事件同一時間多次被觸發:
float[] values = event.values;
float x = values[0];
float y = values[1];
float z = values[2];
Log.i(TAG, "onSensorChanged:" + "x:" + x + ",y:" + y + ",z:" + z);
if (x >= 15 || x <= -15 || y >= 15 || y <= -15 || z >= 15 || z <= -15) {
if (allowShake()) {//判斷是否為重復晃動
Log.e(TAG, "搖一搖,搖一搖");
new AllowShake().start();
} else {
Log.e(TAG, "2s 後再次允許搖動");
}
『陸』 Android 搖一搖功能簡單實現
目前市場上很多應用都有著搖一搖功能,晃動手機就能夠達到頁面跳轉等效果,本期我們實現一個簡單的搖一搖功能Android demo。
在實現搖一搖功能之前,我們首先對Android 平台的感測器進行簡單說明。
多數的Android手機中都有著內置感測器,用來測量運動,屏幕方向和各種環境條件。這些感測器能夠提供比較高精度的原始數據,對於設備的定位,三維移動及設備周圍環境的變化能夠進行監測。
那麼Android平台支持的感測器有哪些呢?
通常來說,Android平台支持的三大類:
顯然搖一搖動作時需要對動態感測器進行監聽,通過對感測器獲得的加速度參數進行判斷,判斷用戶是否搖動了手機。
從上述的感測器類型上來看,我們需要使用的是動態感測器。
Android平台支持多種動態感測器,常用的幾項如下:
上面便是常見的Android支持的動態感測器了,詳細說明可以參考 Android感測器說明官方文檔 .
本文著重說明的是 TYPE_ACCELEROMETER 來實現搖一搖監聽。
首先我們需要實現一個加速度感測器的實例:
然後我們需要設置一個監聽,通過計算三維方向上的加速度變化率來決定搖一搖動作是否要被觸發:
其中iSensorCallBack是我們設置的一個監聽回調:
這樣搖一搖動作的監聽及回調就基本設置完成了。
但是在使用動態感測器時還需要注意感測器的監聽注冊及取消注冊,API為我們提供了方法:
這樣的話我們就可以在需要使用搖一搖功能是調用 register 方法注冊,而在需要停止搖一搖監聽時調用 unregister 移除注冊。
如上,這樣我們就實現了一個搖一搖簡單demo。
Android感測器說明官方文檔
『柒』 Android 中有哪些感測器的數據是可以分享的
目前 Android 設備支持的感測器類型如下:
TYPE_ACCELEROMETER 加速度感測器又叫 G-sensor,該數值包含地心引力的影響,單位是 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 地磁旋轉矢量感測器,提供手機的旋轉矢量,當手機處於休眠狀態時,仍可以記錄設備的方位。
TYPE_GRAVITY 重力感測器簡稱 GV-sensor,單位是 $m/s^2%,碰激測量應用於設備X、Y、Z軸上的重力。在地球上,重力數值為9.8,
TYPE_GYROSCOPE 陀螺儀感測器叫做Gyro-sensor,返回x、y、z三軸的角加速度數據。單位是 radians/second。
TYPE_GYROSCOPE_UNCALIBRATED 未校準陀螺儀感測器,提供原始的、未校準、補償的陀螺儀數據,用於後期處理和融合定位數據。
TYPE_LIGHT 光線感應感測器檢測實時的光線強度,光強單位是lux,其物理意義是照射到單位面積上的光通量。
TYPE_LINEAR_ACCELERATION 線性加速度感測器簡稱LA-sensor。線性加速度感測器是加速度感測器減去重力影響獲取的數據。單位是 m/s2。
TYPE_MAGNETIC_FIELD 磁力感測器簡稱為M-sensor,返回 x、y、z 三軸的環境磁場數據。該數值的單位是微特斯拉(micro-Tesla)嫌察,用uT表示。單位也可以是高斯(Gauss),1Tesla=10000Gauss。硬體上一般沒有獨立的磁力感測器,磁力數據由電子羅盤感測器提供(E-compass)。電子羅盤感測器同時提供方向感測器數據。
TYPE_MAGNETIC_FIELD_UNCALIBRATED 未校準磁力感測器,提供原始的、未校準的磁場數據。
TYPE_ORIENTATION 方向感測器簡稱為O-sensor,返回三軸的角度數據,方向數據的單位是角度。為了得到精確的角度數據,E-compass 需要獲取 G-sensor 的數據,經過計算生產 O-sensor 數據,否則只能獲取水平方向的角度。方向感測器提供三個數據,分別為azimuth、pitch和roll:
azimuth: 方位,返回水平時磁北極和 Y 軸的夾角,范圍為0°至360°。0°為北,90°為東,180°為南,270°為西。
pitch: x 軸和水平面的芹吵茄夾角,范圍為-180°至180°。當 z 軸向 y 軸轉動時,角度為正值。
roll: y 軸和水平面的夾角,由於歷史原因,范圍為-90°至90°。當 x 軸向 z 軸移動時,角度為正值。
TYPE_PRESSURE 壓力感測器,單位是hPa(百帕斯卡),返回當前環境下的壓強。
TYPE_PROXIMITY 接近感測器檢測物體與手機的距離,單位是厘米。一些接近感測器只能返回遠和近兩個狀態,因此,接近感測器將最大距離返回遠狀態,小於最大距離返回近狀態。
TYPE_RELATIVE_HUMIDITY 濕度感測器,單位是 %,來測量周圍環境的相對濕度。
TYPE_ROTATION_VECTOR 旋轉矢量感測器簡稱RV-sensor。旋轉矢量代表設備的方向,是一個將坐標軸和角度混合計算得到的數據。RV-sensor輸出三個數據:
x*sin(theta/2)
y*sin(theta/2)
z*sin(theta/2)
sin(theta/2)是 RV 的數量級。RV 的方向與軸旋轉的方向相同。RV 的三個數值,與cos(theta/2)組成一個四元組。
TYPE_SIGNIFICANT_MOTION 特殊動作觸發感測器。
TYPE_STEP_COUNTER 計步感測器,用於記錄激活後的步伐數。
TYPE_STEP_DETECTOR 步行檢測感測器,用戶每走一步就觸發一次事件。
TYPE_TEMPERATURE 溫度感測器,目前已被TYPE_AMBIENT_TEMPERATURE替代。
作者:肥肥魚
『捌』 Android感測器的使用
目前每部Android 手機裡面都會內置有許多的感測器,它們能夠監測到各種發生在手機上的物理事件,而我們只要靈活運用這些事件就可以編寫出很多好玩的應用程序。下面我們開始簡單的感測器使用的學習。
1.手機內置的感測器是一種微型的物理設備,它能夠探測、感受到外界的信號,並按一定規律轉換成我們所需要的信息。
2.Android手機通常會支持多種類型的感測器,如光照感測器,地磁感測器,壓力感測器,溫度感測器。
3.Android手機只是負責將這些感測器所輸出的信息傳遞給我們,至於具體如何去利用這些信息就要我們在程序中具體去利用這些得到的數據去處理了。
從Android1.5開始,系統內置了對多達八種感測器的支持,他們分別是:加速度感測器(accelerometer)、陀螺儀(gyroscope)、環境光照感測器(light)、磁力感測器(magnetic field)、方向感測器(orientation)、壓力感測器(pressure)、距離感測器(proximity)和溫度感測器(temperature)。
1.Android所有的感測器都歸感測器管理器SensorManager管理,如下是獲得感測器的方法:
2.獲取某個或者某些感測器的方法有如下三種:
第一種:獲取某種感測器:
第二種:獲取某種感測器列表:
第三種:獲取所有感測器列表:
『玖』 android加速度感測器怎麼使用
使用加速度感測器與其他感測器的方法大致相同,通過調用系統API就可以實現。分為以下幾步:
1.獲取SensorManager
2.使用SensorManager獲取加速度感測器
3.創建自定義的感測器監聽函數,並注冊
4.相對應的,在合適位置實現注銷監聽器的調用
簡單的代碼如下:
public class MainActivity extends Activity {
private static final String TAG = "SensorTest";
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private TestSensorListener mSensorListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
// 初始化感測器
mSensorListener = new TestSensorListener();
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
protected void onResume() {
super.onResume();
// 注冊感測器監聽函數
mSensorManager.registerListener(mSensorListener, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
}
@Override
protected void onPause() {
super.onPause();
// 注銷監聽函數
mSensorManager.unregisterListener(mSensorListener);
}
private void initViews() {
mSensorInfoA = (TextView) findViewById(R.id.sensor_info_a);
}
class TestSensorListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
// 讀取加速度感測器數值,values數組0,1,2分別對應x,y,z軸的加速度
Log.i(TAG, "onSensorChanged: " + event.values[0] + ", " + event.values[1] + ", " + event.values[2]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "onAccuracyChanged");
}
}
}