編輯:關於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由於google doc 很多人都打不開,故更新了源碼下載地址 【源碼下載】----2011-01-1
《Android源碼設計模式解析與實戰》讀書筆記(十七) 第十七章、中介者模式 中介者模式也稱為調解者模式或調停者模式,是一種行為型模式。 1.定義 中介者模式包裝
安卓開發GitHub的入門使用流程---》適合小學生 使用AndroidStudio項目發布到GitHub 在AndroidStudio中新建一個項目 設
Android studio 插件安裝 plugin Android studio 插件安裝 plugin android studio 上有很多第三方