说到传感器,我们比较熟悉的就是手机的重力传感器,光线传感器。因为我们很多感应手机旋转,打电话时靠近耳朵屏幕熄灭,这些都是传感器的功劳。今天我就介绍一下Android中传感器的种类,并说明如何获取当前手机支持的传感器。
1.Android中传感器的种类
编号 | Sensor类的传感器类型 | 传感器名称 | 说明 |
1 | TYPE_ACCELEROMETER | 加速度 | 常用于摇一摇功能 |
2 | TYPE_MAGNETIC_FIELD | 磁场 | |
3 | TYPE_ORIENTATION | 方向 | 已弃用,取而代之的是getOrientation方法 |
4 | TYPE_GYROSCOPE | 陀螺仪 | 用来感应手机的旋转和倾斜 |
5 | TYPE_LIGHT | 光线 | 用来感应手机正面的光线强弱 |
6 | TYPE_PRESSURE | 压力 | 用来感应气压 |
7 | TYPE_TEMPERATURE | 温度 | 已弃用,取而代之的是类型13 |
8 | TYPE_PROXIMITY | 距离 | |
9 | TYPE_GRAVITY | 重力 | |
10 | TYPE_LINEAR_ACCELERATION | 线性加速度 | |
11 | TYPE_ROTATION_VECTOR | 旋转矢量 | |
12 | TYPE_RELATIVE_HUMIDITY | 相对湿度 | |
13 | TYPE_AMBIENT_TEMPERATURE | 环境温度 | |
14 | TYPE_MAGNETIC_FIELD_UNCALIBRATED | 无标定磁场 | |
15 | TYPE_GAME_ROTATION_VECTOR | 无标定旋转矢量 | |
16 | TYPE_GYROSCOPE_UNCALIBRATED | 未校准陀螺仪 | |
17 | TYPE_SIGNIFICANT_MOTION | 特殊动作 | |
18 | TYPE_STEP_DETECTOR | 步行检测 | 用户每走一步就触发一次事件 |
19 | TYPE_STEP_COUNTER | 步行计数 | 记录激活后的步伐数 |
20 | TYPE_GEOMAGNETIC_ROTATION_VECTOR | 地磁旋转矢量 | |
21 | TYPE_HEART_RATE | 心跳速率 | 可穿戴设备使用,如手环 |
22 | TYPE_TILT_DETECTOR | 倾斜检测 | |
23 | TYPE_WAKE_GESTURE | 唤醒手势 | |
24 | TYPE_GLANCE_GESTURE | 掠过手势 | |
25 | TYPE_PICK_UP_GESTURE | 拾起手势 | |
2.获取当前手机全部传感器类型示例
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_sensor"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
MainActivity.java
public class MainActivity extends BaseActivity {
private TextView tv_sensor;
@Override
protected MvcBaseModel getModelImp() {
return null;
}
@Override
protected int getContentLayoutId() {
return R.layout.activity_main;
}
@Override
protected void initWidget() {
tv_sensor = findViewById(R.id.tv_sensor);
SensorManager mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// 获取当前设备支持的传感器列表
List<Sensor> sensorList = mSensorMgr.getSensorList(Sensor.TYPE_ALL);
String content = "";
for (int i = 0; i < sensorList.size(); i++) {
if (sensorList.get(i).getType() == Sensor.TYPE_ACCELEROMETER) {
//加速度传感器
content += i + "." + "加速度传感器" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_MAGNETIC_FIELD) {
//磁场传感器
content += i + "." + "磁场传感器" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_ORIENTATION) {
//方向传感器
content += i + "." + "方向传感器" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_GYROSCOPE) {
//陀螺仪
content += i + "." + "陀螺仪" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_LIGHT) {
//光线
content += i + "." + "光线" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_TEMPERATURE) {
//温度
content += i + "." + "温度" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_PRESSURE) {
//压力
content += i + "." + "压力" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_PROXIMITY) {
//距离
content += i + "." + "距离" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_GRAVITY) {
//重力
content += i + "." + "重力" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
//线性加速度
content += i + "." + "线性加速度" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_ROTATION_VECTOR) {
//旋转矢量
content += i + "." + "旋转矢量" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_RELATIVE_HUMIDITY) {
//相对湿度
content += i + "." + "相对湿度" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
//环境温度
content += i + "." + "环境温度" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_MAGNETIC_FIELD_UNCALIBRATED) {
//无标定磁场
content += i + "." + "无标定磁场" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_GAME_ROTATION_VECTOR) {
//无标定旋转矢量
content += i + "." + "无标定旋转矢量" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_GYROSCOPE_UNCALIBRATED) {
//未校准陀螺仪
content += i + "." + "未校准陀螺仪" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_SIGNIFICANT_MOTION) {
//特殊动作
content += i + "." + "特殊动作" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_STEP_DETECTOR) {
//步行检测
content += i + "." + "步行检测" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_STEP_COUNTER) {
//步行计数
content += i + "." + "步行计数" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_STEP_COUNTER) {
//步行计数
content += i + "." + "步行计数" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR) {
//地磁旋转矢量
content += i + "." + "地磁旋转矢量" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == Sensor.TYPE_HEART_RATE) {
//心跳速率
content += i + "." + "心跳速率" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == 22) {//Sensor.TYPE_TILT_DETECTOR
//倾斜检测
content += i + "." + "倾斜检测" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == 23) {//Sensor.TYPE_WAKE_GESTURE
//唤醒手势
content += i + "." + "唤醒手势" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == 24) {//Sensor.TYPE_GLANCE_GESTURE
//掠过手势
content += i + "." + "掠过手势" + ":" + sensorList.get(i).getName() + "\n";
} else if (sensorList.get(i).getType() == 25) {//Sensor.TYPE_PICK_UP_GESTURE
//抬起手势
content += i + "." + "抬起手势" + ":" + sensorList.get(i).getName() + "\n";
} else {
content += i + "." + sensorList.get(i).getType() + ":" + sensorList.get(i).getName() + "\n";
}
}
tv_sensor.setText(content);
}
}