据Android官方显示,Android传感器可分为三类
Android平台支持三类传感器:
- 运动传感器
这些传感器测量沿三个轴的加速力和旋转力。此类别包括加速度计,重力传感器,陀螺仪和旋转矢量传感器。
- 环境传感器
这些传感器测量各种环境参数,如环境空气温度和压力、照度和湿度。这类包括气压计、光度计和温度计。
- 位置传感器
这些传感器测量设备的物理位置。这类别包括方向传感器和磁力计。
智能手机常用传感器支持
传感器 | Java中的名称 | 本地接口名称 | 数值 |
---|---|---|---|
加速传感器 | TYPE_ACCELEROMETER | SENSOR_TYPE_ACCELEROMETER | 1 |
磁场传感器 | TYPE_MAGNETIC_FIELD | SENSOR_TYPE_MAGNETIC_FIELD | 2 |
方向传感器 | TYPE_ORIENTATION | SENSOR_TYPE_ORIENTATION | 3 |
陀螺仪传感器 | TYPE_GYROSCOPE | SENSOR_TYPE_GYROSCOPE | 4 |
光线传感器 | TYPE_LIGHT | SENSOR_TYPE_LIGHT | 5 |
压力传感器 | TYPE_PRESSURE | SENSOR_TYPE_PRESSURE | 6 |
温度传感器 | TYPE_AMBIENT_TEMPERATURE | SENSOR_TYPE_TEMPERATURE | 7 |
距离传感器 | TYPE_PROXIMITY | SENSOR_TYPE_PROXIMITY | 8 |
接下来,我们来谈谈三种传感器
一是运动传感器
传感器的可能结构因传感器类型而异:
- 重力、线性加速度、旋转矢量、有效运动、基于硬件或软件的步进计数器和步进检测器传感器。
- 加速度传感器和陀螺仪传感器始终以硬件为基础。
二是环境传感器
Android该平台为环境传感器提供了四个传感器,可以监控各种环境属性。您可以使用这些传感器进行监控Android设备附近的相对环境湿度、照明、环境压力和环境温度。所有四个环境传感器都是基于硬件的,只有在设备制造商将其内置到设备中后才能使用。
三是距离传感器
Android该平台为距离传感器提供了两个传感器,可以确定设备的位置:地磁场传感器和加速度计。Android该平台还提供了一个传感器,可以确定设备的面部和物体之间的传感器距离(称为接近传感器)。地磁场传感器和接近传感器是基于硬件的。大多数手机和平板电脑制造商都包含地磁场传感器。同样,手机制造商通常包含一个接近传感器,以确定何时将手机放在接近用户的脸上(例如在通话期间)。为了确定设备的方向,您可以使用设备的加速度计和地磁场传感器的读数。
介绍后开始使用
传感器框架
类/接口 | 介绍说明 |
---|---|
SensorManager | 您可以使用这些例子来创建传感器服务。这种方法提供了各种方法来访问和列出传感器、注册和取消传感器事件侦听器和获取方向信息。这类传感器还提供了报告传感器精度、设置数据采集速率和校准传感器的几个传感器常数。 |
Sensor | 您可以使用此类例子来创建特定的传感器。它提供了各种方法来确定传感器的功能。 |
SensorEvent | 该系统使用此类创建传感器事件对象,并提供传感器事件的信息。传感器事件对象包括以下信息:原始传感器数据、生成事件的传感器类型、数据的准确性和事件的时间戳。 |
SensorEventListener | 当传感器值或传感器精度发生变化时,可以使用此接口创建两种回调方法(传感器事件)。 |
获取传感器管理者的对象
// 获取传感器管理者的对象 SensorManager mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
获得指定的传感器对象
////获得所有传感器 List list = sensorManager.getSensorList(Sensor.TYPE_ALL); // 获取指定的传感器 Sensor sensor = mSensorManager.getDefaultSensor(int type); /例:获得加速度传感器 Sensor sensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
解除注册
//解除注册-别忘了把它放在合适的地方 sensorManager.unregisterListener(this,sensor);
获取传感器的完整代码
public class SensorActivity extends AppCompatActivity { private SensorManager sensorManager; private List<Sensor> list; private Button mGetSensor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor); mGetSensor = findViewById(R.id.get_sensor); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); list = sensorManager.getSensorList(Sensor.TYPE_ALL); mGetSensor.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setSensor(); } }); } public void setSensor() { Log.d("传感器:", "一共有" list.size() "个传感器"); for (int i = 0; i < list.size(); i ) { String sensortext = "对应的type" list.get(i).getType()
+ " 设备名称:" + list.get(i).getName()
+ " 设备版本:" + list.get(i).getVersion()
+ " 供应商:" + list.get(i).getVendor();
switch (list.get(i).getType()) {
case Sensor.TYPE_ACCELEROMETER:
Log.d("传感器:", "加速度传感器-->" + sensortext);
break;
case Sensor.TYPE_GYROSCOPE:
Log.d("传感器:", "陀螺仪传感器-->" + sensortext);
break;
case Sensor.TYPE_LIGHT:
Log.d("传感器:", "环境光线传感器-->" + sensortext);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
Log.d("传感器:", "电磁场传感器-->" + sensortext);
break;
case Sensor.TYPE_ORIENTATION:
Log.d("传感器:", "方向传感器-->" + sensortext);
break;
case Sensor.TYPE_PRESSURE:
Log.d("传感器:", "压力传感器-->" + sensortext);
break;
case Sensor.TYPE_PROXIMITY:
Log.d("传感器:", "距离传感器-->" + sensortext);
break;
case Sensor.TYPE_TEMPERATURE:
Log.d("传感器:", "温度传感器-->" + sensortext);
break;
case Sensor.TYPE_GRAVITY:
Log.d("传感器:", "重力传感器-->" + sensortext);
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
Log.d("传感器:", "线性加速度传感器-->" + sensortext);
break;
case Sensor.TYPE_ROTATION_VECTOR:
Log.d("传感器:", "旋转矢量传感器-->" + sensortext);
break;
case Sensor.TYPE_RELATIVE_HUMIDITY:
Log.d("传感器:", "周围环境相对湿度传感器-->" + sensortext);
break;
}
}
}
}
详细的各种传感器使用的方法以后再接着聊
传送门