傳感器類型:
- 加速度:SENSOR_TYPE_ACCELEROMETER
- 磁力:SENSOR_TYPE_MAGNETIC_FIELD
- 方向:SENSOR_TYPE_ORIENTATION
- 陀螺儀:SENSOR_TYPE_GYROSCOPE
- 光線感應(yīng):SENSOR_TYPE_LIGHT
- 壓力:SENSOR_TYPE_PRESSURE
- 溫度 :SENSOR_TYPE_TEMPERATURE
- 接近:SENSOR_TYPE_PROXIMITY
- 重力:SENSOR_TYPE_GRAVITY
- 線性加速度:SENSOR_TYPE_LINEAR_ACCELERATION
- 旋轉(zhuǎn)矢量:SENSOR_TYPE_ROTATION_VECTOR
如何使用:
- 獲取SensorManager對(duì)象
- 獲取Sensor對(duì)象
- 注冊(cè)Sensor對(duì)象
- 重寫<code>onAccuracyChanged</code>, <code>onSensorChanged</code>方法
- 注銷Sensor對(duì)象
以下是加速度傳感器的例子:
public class AccelerometerActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mSensor;
private EditText mEdtAcc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accelerometer);
mEdtAcc = (EditText) findViewById(R.id.acc_edtAcc);
//1. 獲取SensorManager
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
//2. 獲取Sensor
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (mSensor == null){
Toast.makeText(this, "傳感器不存在", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onResume() {
super.onResume();
//3. 注冊(cè)Sensor
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI);
}
@Override
// 當(dāng)傳感器的值發(fā)生改變時(shí)回調(diào)該方法
public void onSensorChanged(SensorEvent sensorEvent) {
//4. 重寫onSensorChanged和onAccuracyChanged方法
float[] values = sensorEvent.values;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("X軸上的加速度:");
stringBuilder.append(values[0]);
stringBuilder.append("Y軸上的加速度");
stringBuilder.append(values[1]);
stringBuilder.append("Z軸上的加速度");
stringBuilder.append(values[2]);
mEdtAcc.setText(stringBuilder.toString());
}
@Override
// 當(dāng)傳感器精度改變時(shí)回調(diào)該方法。
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
protected void onPause() {
super.onPause();
//5. 注銷Sensor
mSensorManager.unregisterListener(this, mSensor);
}
}
注:
<code>SersorManager.registerListener(SensorListener listener, Sensor sensor, int rate)</code>中的第三個(gè)方法是<code>int</code>類型的<code>rate</code>,指定獲取傳感器數(shù)據(jù)的頻率。
<code>rate</code>可以獲取傳感器數(shù)據(jù)的頻率,支持如下幾個(gè)頻率值:
<code>SENSOR_DELAY_FASTEST</code>:最快,延遲最小。
<code>SENSOR_DELAY_GAME</code>:適合游戲的頻率。
<code>SENSOR_DELAY_NORMAL</code>:正常頻率。
<code>SENSOR_DELAY_UI</code>:適合普通用戶界面的頻率。
關(guān)于 方向傳感器 的寫法可以參考下面網(wǎng)址,寫得不錯(cuò):
http://www.bkjia.com/Androidjc/924827.html
檢測(cè)傳感器
檢測(cè)傳感器一般有兩種方法:
-
一種是在實(shí)例化Sensor的時(shí)候判斷當(dāng)前傳感器是否存在,如:
檢測(cè)設(shè)備是否存在xxx傳感器 -
另一種方法在<code>manifest.xml</code>清單上加上<code><uses-feature></code>來過濾,如:
如果你向你的清單文件中添加這個(gè)元素和描述符,僅僅 設(shè)備有加速度傳感器的用戶能在Google Play中看見你的應(yīng)用程序。
如果你的應(yīng)用程序一定要某個(gè)傳感器的時(shí)候,你應(yīng)該設(shè)置這個(gè)描述符為<code>android:required="true"</code>。如果你的應(yīng)用程序的一些功能使用一個(gè)傳感器,但是沒有傳感器仍然可以運(yùn)行,你應(yīng)該在<code><uses-feature></code>元素中列出這個(gè)傳感器,但是設(shè)置這個(gè)描述符為<code>android:required="false"</code>。這個(gè)幫助確保設(shè)備能安裝你的應(yīng)用,即使它們沒有這個(gè)特定的傳感器。這也是一個(gè)項(xiàng)目管理的最佳實(shí)踐,幫組你跟蹤你的應(yīng)用程序使用的特性。記住,如果你的應(yīng)用程序使用一個(gè)特定的傳感器,但是沒有它仍然可以運(yùn)行,那么你應(yīng)該在運(yùn)行時(shí)檢測(cè)這個(gè)傳感器,并且酌情啟動(dòng)或禁用應(yīng)用程序的功能。
相關(guān)文獻(xiàn):http://blog.csdn.net/p106786860/article/details/16800467

