android系統(tǒng)中手機(jī)傳感器類型的定義
int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. //三軸加速度感應(yīng)器 返回三個(gè)坐標(biāo)軸的加速度 單位m/s2
int TYPE_ALL A constant describing all sensor types. //用于列出所有感應(yīng)器
int TYPE_GRAVITY A constant describing a gravity sensor type. //重力感應(yīng)器
int TYPE_GYROSCOPE A constant describing a gyroscope sensor type //陀螺儀 可判斷方向 返回三個(gè)坐標(biāo)軸上的角度
int TYPE_LIGHT A constant describing an light sensor type. //光線感應(yīng)器 單位 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. //磁場(chǎng)感應(yīng) 返回三個(gè)坐標(biāo)軸的數(shù)值 微特斯拉
int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation() instead. //方向感應(yīng)器 已過時(shí) 可以使用方法獲得
int TYPE_PRESSURE A constant describing a pressure sensor type //壓力感應(yīng)器 單位 千帕斯卡
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 //溫度傳感器 單位 攝氏度
Android監(jiān)聽傳感器事件
要監(jiān)控傳感器的原始數(shù)據(jù)篡殷,你需要實(shí)現(xiàn) SensorEventListener 接口的 onAccuracyChanged() 和onSensorChanged() 回調(diào)方法诅福。只要發(fā)生以下事件,Android系統(tǒng)就會(huì)調(diào)用這兩個(gè)方法:
傳感器精度發(fā)生變化
在這種情況下脚猾,系統(tǒng)會(huì)調(diào)用 onAccuracyChanged() 方法鸽嫂,并傳給你一個(gè)發(fā)生變化的 Sensor 對(duì)象的引用和新的傳感器精度值边酒。精度用以下四種狀態(tài)常量之一來表示: SENSOR_STATUS_ACCURACY_LOW僚碎、SENSOR_STATUS_ACCURACY_MEDIUM、 SENSOR_STATUS_ACCURACY_HIGH抠藕、 和 SENSOR_STATUS_UNRELIABLE饿肺。傳感器報(bào)送一個(gè)新數(shù)據(jù)
這種情況下,系統(tǒng)會(huì)調(diào)用 onSensorChanged() 方法盾似,并傳給你一個(gè) SensorEvent 對(duì)象敬辣。 SensorEvent 對(duì)象中包含了新數(shù)據(jù)的相關(guān)信息,包括:數(shù)據(jù)精度颜说、生成數(shù)據(jù)的傳感器购岗、生成數(shù)據(jù)的時(shí)間戳、傳感器采到的新數(shù)據(jù)门粪。
代碼示例
在自定義的類中implements SensorEventListener類類
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener,SensorEventListener喊积。
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
獲取傳感器manager對(duì)象,及傳感器對(duì)象玄妈,根據(jù)注冊(cè)的參數(shù)類型乾吻,在回調(diào)函數(shù)中返回事件
疑問:SensorEventListener類的Sensor為什么不能像SensorListener
中注冊(cè)同時(shí)監(jiān)控多個(gè)類型的傳感器??
sm.registerListener(this,
Sensor.TYPE_ACCELEROMETER |
Sensor.TYPE_MAGNETIC_FIELD |
Sensor.TYPE_ORIENTATION |
Sensor.TYPE_GYROSCOPE |
Sensor.TYPE_LIGHT |
Sensor.TYPE_PRESSURE |
Sensor.TYPE_TEMPERATURE |
Sensor.TYPE_PROXIMITY |
Sensor.TYPE_GRAVITY |
Sensor.TYPE_LINEAR_ACCELERATION |
Sensor.TYPE_ROTATION_VECTOR,
SensorManager.SENSOR_DELAY_NORMAL);
對(duì)于繼承自Activity的類 需要在其生命周期函數(shù)中髓梅,加上對(duì)監(jiān)聽器的管理
@Override
protected void onResume() {
super.onResume();
boolean supported=mSensorManager.registerListener(this,mSensor,SensorManager.SENSOR_DELAY_NORMAL);
if (!supported) {
mSensorManager.unregisterListener(this);
throw new UnsupportedOperationException(
"Accelerometer not supported");
}
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
}
@Override
protected void onStop() {
mSensorManager.unregisterListener(this);
super.onStop();
}
同時(shí)實(shí)現(xiàn)與傳感器監(jiān)聽器有關(guān)的兩個(gè)回調(diào)函數(shù),自己的相關(guān)代碼在這里實(shí)現(xiàn):
public void onSensorChanged(SensorEvent event){
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
return;
}
String str = "X:" + event.values[0] + "绎签,Y:" + event.values[1] + "枯饿,Z:" + event.values[2];
a=Math.sqrt(event.values[0]*event.values[0]
+event.values[1]*event.values[1]
+event.values[2]*event.values[2]);
DataPoint[] values = new DataPoint[1];
values[0] = new DataPoint(x,a);
x++;
series.appendData(values[0], true, 300);
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy){
}