Android笔记
——传感器
【若对该知识点有更多想了解的,欢迎私信博主~~】
传感器:Sensor
传感器列表
名称 | 说明 |
---|---|
TYPE_ACCELEROMETER | 加速度传感器 |
TYPE_MAGNETIC_FIELD | 磁场传感器 |
TYPE_ORIENTATION | 方向传感器 |
TYPE_GYROSCOPE | 陀螺仪传感器 |
TYPE_LIGHT | 光照传感器 |
TYPE_PRESSURE | 气压传感器 |
TYPE_TEMPERATURE | 手机内部温度传感器 |
TYPE_PROXIMITY | 距离传感器 |
TYPE_GRAVITY | 重力传感器 |
TYPE_LINEAR_ACCELERATION | 线性加速度传感器 |
TYPE_ROTATION_VECTOR | 旋转矢量传感器 |
TYPE_RELATIVE_HUMIDITY | 湿度传感器 |
TYPE_AMBIENT_TEMPERATURE | 手机外部温度传感器 |
TYPE_STEP_DETECTOR | 累计步数传感器 |
TYPE_STEP_COUNTER | 单次步数传感器 |
使用
//实现接口SensorEventListener
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;//1.在类中创建SensorManager传感器管理器
private TextView txt1;
private TextView txt2;
private TextView txt3;
private TextView txt4;
private TextView txt5;
private TextView txt6;
private TextView txt7;
private TextView txt8;
private TextView txt9;
private TextView txt10;
private TextView txt11;
private TextView txt12;
private TextView txt13;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//2.实例化SensorManager,获取传感器服务
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//获取当前手机支持哪些传感器
List<Sensor> list=sensorManager.getSensorList(Sensor.TYPE_ALL);
for (int i = 0; i < list.size(); i++) {
Log.e("bbb",list.get(i).getName());
}
}
@Override
protected void onResume() {
super.onResume();
//3.在onResume中向SensorManager注册传感器
//加速度传感器
//加速度传感器=重力传感器+线性加速度传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);
//磁场传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_NORMAL);
//方向传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
//陀螺仪传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL);
//光照传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_NORMAL);
//气压传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE), SensorManager.SENSOR_DELAY_NORMAL);
//手机内部温度传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE), SensorManager.SENSOR_DELAY_NORMAL);
//距离传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_NORMAL);
//重力传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), SensorManager.SENSOR_DELAY_NORMAL);
//线性加速度传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_NORMAL);
//旋转矢量传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);
//湿度传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY), SensorManager.SENSOR_DELAY_NORMAL);
//手机外部温度传感器
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
//在super前调用,表示先清空子类,再清空父类
sensorManager.unregisterListener(this);
super.onStop();
}
//传感器的值发生变化时触发
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float[] values = sensorEvent.values;
int sensorType = sensorEvent.sensor.getType();
StringBuilder sb;
switch (sensorType) {
case Sensor.TYPE_ACCELEROMETER:
Log.e("aaa", "This is " + "加速度传感器");
sb = new StringBuilder();
sb.append("X方向上的加速度:");
sb.append(values[0]);
sb.append("\nY方向上的加速度:");
sb.append(values[1]);
sb.append("\nZ方向上的加速度:");
sb.append(values[2]);
txt1.setText("加速度传感器:"+sb.toString());
break;
case Sensor.TYPE_MAGNETIC_FIELD:
Log.e("aaa", "This is " + "磁场传感器");
sb = new StringBuilder();
sb.append("X方向上的磁场强度:");
sb.append(values[0]);
sb.append("\nY方向上的磁场强度:");
sb.append(values[1]);
sb.append("\nZ方向上的磁场强度:");
sb.append(values[2]);
txt2.setText("磁场传感器:"+sb.toString());
break;
case Sensor.TYPE_ORIENTATION:
Log.e("aaa", "This is " + "方向传感器");
sb = new StringBuilder();
sb.append("X方向上的转过的角度:");
sb.append(values[0]);
sb.append("\nY方向上的转过的角度:");
sb.append(values[1]);
sb.append("\nZ方向上的转过的角度:");
sb.append(values[2]);
txt3.setText("方向传感器:"+sb.toString());
break;
case Sensor.TYPE_GYROSCOPE:
Log.e("aaa", "This is " + "陀螺仪传感器");
sb = new StringBuilder();
sb.append("X方向上的角速度:");
sb.append(values[0]);
sb.append("\nY方向上的角速度:");
sb.append(values[1]);
sb.append("\nZ方向上的角速度:");
sb.append(values[2]);
txt4.setText("陀螺仪传感器:"+sb.toString());
break;
case Sensor.TYPE_LIGHT:
Log.e("aaa", "This is " + "光照传感器");
sb = new StringBuilder();
sb.append("当前光的强度为:");
sb.append(values[0]);
txt5.setText("光照传感器:" + sb.toString());
break;
case Sensor.TYPE_PRESSURE:
Log.e("aaa", "This is " + "压力传感器");
sb = new StringBuilder();
sb.append("当前压力为:");
sb.append(values[0]);
txt6.setText("压力传感器:" + sb.toString());
break;
case Sensor.TYPE_TEMPERATURE:
Log.e("aaa", "This is " + "手机内部温度传感器");
sb = new StringBuilder();
sb.append("当前温度为:");
sb.append(values[0]);
txt7.setText("手机内部温度传感器:" + sb.toString());
break;
case Sensor.TYPE_PROXIMITY:
Log.e("aaa", "This is " + "距离传感器");
sb = new StringBuilder();
sb.append("X方向上的距离:");
sb.append(values[0]);
sb.append("\nY方向上的距离:");
sb.append(values[1]);
sb.append("\nZ方向上的距离:");
sb.append(values[2]);
txt8.setText("距离传感器:"+sb.toString());
break;
case Sensor.TYPE_GRAVITY:
Log.e("aaa", "This is " + "重力传感器");
sb = new StringBuilder();
sb.append("X方向上的重力:");
sb.append(values[0]);
sb.append("\nY方向上的重力:");
sb.append(values[1]);
sb.append("\nZ方向上的重力:");
sb.append(values[2]);
txt9.setText("重力传感器:"+sb.toString());
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
Log.e("aaa", "This is " + "线性加速度传感器");
sb = new StringBuilder();
sb.append("X方向上的线性加速度:");
sb.append(values[0]);
sb.append("\nY方向上的线性加速度:");
sb.append(values[1]);
sb.append("\nZ方向上的线性加速度:");
sb.append(values[2]);
txt10.setText("线性加速度传感器:"+sb.toString());
break;
case Sensor.TYPE_ROTATION_VECTOR:
Log.e("aaa", "This is " + "旋转矢量传感器");
sb = new StringBuilder();
sb.append("X方向上的欧拉角:");
sb.append(values[0]);
sb.append("\nY方向上的欧拉角:");
sb.append(values[1]);
sb.append("\nZ方向上的欧拉角:");
sb.append(values[2]);
txt11.setText("旋转矢量传感器:"+sb.toString());
break;
case Sensor.TYPE_RELATIVE_HUMIDITY:
Log.e("aaa", "This is " + "湿度传感器");
sb = new StringBuilder();
sb.append("当前湿度值:");
sb.append(values[0]);
txt12.setText("湿度传感器:"+sb.toString());
break;
case Sensor.TYPE_AMBIENT_TEMPERATURE:
Log.e("aaa", "This is " + "手机外部温度传感器");
sb = new StringBuilder();
sb.append("当前温度值:");
sb.append(values[0]);
txt13.setText("手机外部温度传感器:"+sb.toString());
break;
}
}
//精度改变时触发
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
private void initView() {
txt1 = (TextView) findViewById(R.id.txt1);
txt2 = (TextView) findViewById(R.id.txt2);
txt3 = (TextView) findViewById(R.id.txt3);
txt4 = (TextView) findViewById(R.id.txt4);
txt5 = (TextView) findViewById(R.id.txt5);
txt6 = (TextView) findViewById(R.id.txt6);
txt7 = (TextView) findViewById(R.id.txt7);
txt8 = (TextView) findViewById(R.id.txt8);
txt9 = (TextView) findViewById(R.id.txt9);
txt10 = (TextView) findViewById(R.id.txt10);
txt11 = (TextView) findViewById(R.id.txt11);
txt12 = (TextView) findViewById(R.id.txt12);
txt13 = (TextView) findViewById(R.id.txt13);
}
}