編輯:關於android開發
Android設備中大多都內置了傳感器,這些傳感器有些是基於硬件的,有些是基於軟件的。通過傳感器,可以監控設備的三維運動、位置,可以推斷用戶的動作,如傾斜、震動、旋轉等,可以監控設備周圍環境的變化等。
在Android平台中,我們可以通過SensorManager訪問、監聽傳感器,並獲取相應的信息,同時提供了一些傳感器的常量,用於傳感器的精確度、獲取速率等。SensorManager中常用的方法有:
1、 Sensor getDefaultSensor(int type):獲取指定類型的默認傳感器。
2、 List<Sensor> getSensorList(int type):獲取指定類型的所有傳感器,如果要獲取所有傳感器,可傳入Sensor.TYPE_ALL。
3、 RegisterListener(SensorEventListener) listensor,Sensor sensor,int rate):為傳感器注冊監聽器。
4、 UnregisterListener(SensorEventListener listener,Sensor sensor):注銷傳感器的監聽器。
Sensor類代表了傳感器,其內部包含了多個常量,用戶指明傳感器的類型,並提供了相應方法,用於獲取傳感器的各種屬性值。

方法有:
1、 getMaximumRange():最大取值范圍。
2、 getName():設備名稱
3、 getPower():功率
4、 getResolution():精度
5、 getType():傳感器類型
6、 getVendor():設備供應商
7、 getVersion():設備版本
SensorEvent該類用於描述傳感器事件,封裝了傳感器事件的信息。這些信息包括傳感器類型、時間、精度和傳感器的原始數據等。

SensorEventListener:用於監聽傳感器,當傳感器的精度或者數據發生變化時,會回調裡面的對應方法。

下面我們通過如下案例來演示器用法,首先獲取設備中所有的傳感器信息,關鍵代碼如下:
public void getSensors(View view){
//獲取手機中的所有傳感器
List<Sensor> sensors= mSensorManager.getSensorList(Sensor.TYPE_ALL);
StringBuilder sb = new StringBuilder();
for(int i=0;i<sensors.size();i++){
Sensor s = sensors.get(i);
sb.append("名稱:").append(s.getName()).append("\n");
sb.append("類型:").append(s.getType()).append(" ");
String type="未知傳感器";
switch (s.getType()){
case Sensor.TYPE_ACCELEROMETER:
type="加速度傳感器";
type="TYPE_ACCELEROMETER";
break;
case Sensor.TYPE_AMBIENT_TEMPERATURE:
type="TYPE_AMBIENT_TEMPERATURE";
break;
case Sensor.TYPE_GAME_ROTATION_VECTOR:
type="TYPE_GAME_ROTATION_VECTOR";
break;
case Sensor.TYPE_GRAVITY:
type="TYPE_GRAVITY";
break;
case Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR:
type="TYPE_GEOMAGNETIC_ROTATION_VECTOR";
break;
case Sensor.TYPE_GYROSCOPE:
type="陀螺儀傳感器";
type="TYPE_GYROSCOPE";
break;
case Sensor.TYPE_GYROSCOPE_UNCALIBRATED:
type="TYPE_GYROSCOPE_UNCALIBRATED";
break;
case Sensor.TYPE_HEART_RATE:
type="TYPE_HEART_RATE";
break;
case Sensor.TYPE_LIGHT:
type="環境光線傳感器";
type="TYPE_LIGHT";
break;
case Sensor.TYPE_MAGNETIC_FIELD:
type="電磁場傳感器";
type="TYPE_MAGNETIC_FIELD";
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
type="TYPE_LINEAR_ACCELERATION";
break;
case Sensor.TYPE_PRESSURE:
type="壓力傳感器";
type="TYPE_PRESSURE";
break;
case Sensor.TYPE_PROXIMITY:
type="距離傳感器";
type="TYPE_PROXIMITY";
break;
case Sensor.TYPE_ORIENTATION:
type="方向傳感器";
type="TYPE_ORIENTATION";
break;
case Sensor.TYPE_TEMPERATURE:
type="溫度傳感器";
type="TYPE_TEMPERATURE";
break;
case Sensor.TYPE_STEP_COUNTER:
type="TYPE_STEP_COUNTER";
break;
case Sensor.TYPE_ROTATION_VECTOR:
type="TYPE_ROTATION_VECTOR";
break;
}
sb.append(type).append("\n");
sb.append("版本:").append(s.getVersion()).append("\n");
sb.append("供應商:").append(s.getVendor()).append("\n");
sb.append("\n");
}
show.setText(sb.toString());
}
效果圖如下:

下面通過監聽加速度傳感器完成搖一搖的功能,關鍵代碼如下:
public class SensorActivity extends ActionBarActivity {
private SensorManager sensorManager;
private Vibrator vibrator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
vibrator=(Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(listener);
}
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
//傳感器數據變化執行的方法
float[] v = sensorEvent.values;
int sValue = 20;
float x = v[0];//x方向的加速度
float y = v[1];//y方向
float z = v[2];//z方向
if(Math.abs(x)>sValue){
vibrator.vibrate(300);
}
if(Math.abs(y)>sValue){
vibrator.vibrate(300);
}
if(Math.abs(z)>sValue){
vibrator.vibrate(300);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
//精度變化的方法
}
};
}
作者:傑瑞教育
android ListView詳解,androidlistview
android ListView詳解,androidlistview由於google doc 很多人都打不開,故更新了源碼下載地址 【源碼下載】----2011-01-1
《Android源碼設計模式解析與實戰》讀書筆記(十七)
《Android源碼設計模式解析與實戰》讀書筆記(十七) 第十七章、中介者模式 中介者模式也稱為調解者模式或調停者模式,是一種行為型模式。 1.定義 中介者模式包裝
安卓開發GitHub的入門使用流程---》適合小學生
安卓開發GitHub的入門使用流程---》適合小學生 使用AndroidStudio項目發布到GitHub 在AndroidStudio中新建一個項目 設
Android studio 插件安裝 plugin
Android studio 插件安裝 plugin Android studio 插件安裝 plugin android studio 上有很多第三方