传感器分类以及在Sensor中的标识:
1.动作传感器
加速(accelerometer)传感器:TYPE_...
重力(gravity)传感器
陀螺仪(gyroscope)传感器
旋转向量(rotational vector)传感器
2.环境传感器(在Android中并不常见)
光度(barometer)传感器:TYPE_LIGHT
湿度(photometer)传感器
温度(thermometer)传感器
3.位置传感器
方向(orientation)传感器
磁力(magnetometer)传感器
-在Android SDK中 可以利用ASK(Android sensor framework)来进行操作
----------------------------------------------------------------------------------------------------------------
SensorManager: 用于创建Sensor server 实例 ,通过枚举传感器进行访问, 包含注册、注销传感器方法,还提供设置传感器精度、频率、校正等有关常量
Sensor : 提供传感器提供的数据,以及一些设备信息(版本类型等)
SensorEvent: 提供传感器提供的事件以及数据
SensorEventListener:该接口包含两个接口方法:当精度和值发生变化是调用这两个方法
----------------------------------------------------------------------------------------------------------------------
应用:
一、获取所有的传感器信息
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
StringBuffer buffer = new StringBuffer();
for (Sensor sensor : sensors) {
buffer.append(sensor.getName() + "\n");
}
二、获取数据
package comzlw.sensor;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class MotionActivity extends Activity implements SensorEventListener {
private TextView textView;
private SensorManager sensorManager;
private TextView textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
textView = (TextView) findViewById(R.id.text);
textView2 = (TextView) findViewById(R.id.text2);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
protected void onPause() {
// 注销监听器
sensorManager.unregisterListener(this);
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// 注册监听器
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY),
SensorManager.SENSOR_DELAY_GAME);
}
// 传感器精度变化时调用
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
String str = null;
String str1 = null;
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
str = ("加速度:\n" + "X:" + x + "; Y:" + y + "; Z:" + z);
textView.setText(str);
break;
case Sensor.TYPE_GRAVITY:
float x1 = event.values[0];
float y1 = event.values[1];
float z1 = event.values[2];
str1 = "重力传感器:\n" + "X:" + x1 + "; Y:" + y1 + "; Z:" + z1;
textView2.setText(str1);
break;
}
}
}