从android1.5起,android系统内置了至少八种传感器。
包括:加速度传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)。
实例手机传感器清单
mainActivity.java
package com.cindy.sensorlearn;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.List;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
private Sensor sensor_p,sensor_a,sensor_o;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
System.out.println("所有的传感器");
for(Sensor s:sensorList){
System.out.println(s.getName());
}
}
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()){
case Sensor.TYPE_PROXIMITY:
System.out.println("传感器"+event.values[0]);
break;
case Sensor.TYPE_ACCELEROMETER:
System.out.format("x=%f,y=%f,z=%f\n", event.values[0], event.values[1], event.values[2]);
break;
case Sensor.TYPE_ORIENTATION:
System.out.format("value=%f\n", event.values[0]);
break;
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.cindy.sensorlearn.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
在华为荣耀6上测试log输出:
10-23 19:00:28.979 9787-9787/com.cindy.sensorlearn I/System.out: 所有的传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: LSM330 3-axis Accelerometer 三轴式加速度传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: AK09911 3-axis Magnetic field sensor 地磁场传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: iNemo Orientation sensor 方向传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: Light sensor 光线传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: Proximity sensor 距离传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: LSM330 Gyroscope sensor 陀螺传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: iNemo Gravity sensor 重力传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: iNemo Linear Acceleration sensor 线性加速度传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: iNemo Rotation Vector sensor 旋转矢量传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: huawei hall sensor 华为霍尔传感器
10-23 19:00:47.954 12990-12990/com.cindy.sensorlearn I/System.out: huawei step counter 华为计步器
android所有的传感器都归传感器SensorManager管理,获取传感器管理器的方法如下
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
传感器类型常量 内部整数值 中文名称
Sensor.TYPE_ACCELEROMETER 1 加速度传感器
Sensor.TYPE_MAGNETIC_FIELD 2 磁力传感器
Sensor.TYPE_ORIENTATION 3 方向传感器
Sensor.TYPE_GYROSCOPE 4 陀螺仪传感器
Sensor.TYPE_LIGHT 5 环境光照传感器
Sensor.TYPE_PRESSURE 6 压力传感器
Sensor.TYPE_TEMPERATURE 7 温度传感器
Sensor.TYPE_PROXIMITY 8 距离传感器
从传感器管理器中获取其中某个或者某些传感器的方法有如下三种:
第一种:获取某种传感器的默认传感器
Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二种:获取某种传感器的列表
List pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三种:获取所有传感器的列表,我们这个例子就用的第三种
List sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
对于某一个传感器,它的一些具体信息的获取方法可以见下表:
方法 描述
getMaximumRange() 最大取值范围
getName() 设备名称
getPower() 功率
getResolution() 精度
getType() 传感器类型
getVentor() 设备供应商
getVersion() 设备版本号