现在手机有好多的功能都是由传感器完成的,比如手机可以自动调节屏幕亮度(光线传感器),手机摇一摇功能(加速度传感器)。但是你知道Android中的传感器都有哪些吗?
据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;
}
}
}
}