现在每部Android 手机里面都会内置有许多的传感器,它们能够监测到各种发生在手机上的物理事件,而我们只要灵活运用这些事件就可以编写出很多好玩的应用程序。今天我们开始简单的传感器使用的学习。
目录导航:
传感器的简要说明
一、 手机传感器的介绍:
- 手机中内置的传感器是一种微型的物理设备,它能够探测、感受到外界的信号,并按一定规律转换成我们所需要的信息
- Android 手机通常都会支持多种类型的传感器,如光照传感右器、加速度传感器、地磁传感器、压力传感器、温度传感器
- Android 系统只是负责将这些传感器所输出的信息传递给我们,至于具体如何去利用这些信息就要我们在程序中具体去利用这些得到的数据做处理了
二、 手机基本支持的传感器类型:
从Android1.5开始,系统内置了对多达八种传感器的支持,他们分别是:加速度传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)。
三、 传感器的一些使用说明
- Android所有的传感器都归传感器管理器 SensorManager 管理,获取传感器管理器的方法很简单:
String service_name = Context.SENSOR_SERVICE;
SensorManager sensorManager = (SensorManager)getSystemService(service_name);
- 从传感器管理器中获取其中某个或者某些传感器的方法有如下三种:
第一种:获取某种传感器的默认传感器:
Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二种:获取某种传感器的列表:
List<Sensor> pressureSensors = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三种:获取所有传感器的列表:
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
四、 对于一个传感器,信息的获取:
方法 | 描述 |
getMaximumRange() | 最大取值范围 |
getName() | 设备名称 |
getPower() | 功率 |
getResolution() | 精度 |
getType() | 传感器类型 |
getVentor() | 设备供应商 |
getVersion() | 设备版本号 |
五、 现阶段Android支持的常用传感器有8种:
传感器类型常量 | 内部整数值 | 中文名称 |
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 | 距离传感器 |
传感器的实例
我们创建一个传感器的应用实例,项目结构如下:
一、 在MainActivity中初始化一些信息:
private final static String TAG = "SensorTest";
private TextView textView;
SensorManager sm = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
二、 得到手机上支持的所有传感器类型:创建一个方法
// 显示手机支持的传感器的清单
public void allSensors(View view) {
//从系统服务中获得传感器管理器
//从传感器管理器中获得全部的传感器列表
List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL);
Log.i(TAG, "allsensors: " + allSensors.size()); //显示每个传感器的具体信息
for (Sensor sensor : allSensors) {
String name = sensor.getName();
String vendor = sensor.getVendor();
int version = sensor.getVersion();
Log.i(TAG, "name: " + name + ", vendor: " + vendor + ", version: " + version);
}
}
三、 光传感器的简单使用:
// 光照传感器的使用
public void lightSensors(View view) {
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT);
sm.registerListener(LightListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
} // 光照传感器的事件
private SensorEventListener LightListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float value = event.values[0];
Sensor sensor = event.sensor;
textView.setText(value + "");
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "on accuracy change: " + accuracy);
}
};
四、 加速度传感器的简单使用:
// 加速度传感器
public void accelerSensors(View view) {
Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener(AcclerListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
} // 加速度传感器的事件
private SensorEventListener AcclerListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 加速度可能会是负值,所以要取它们的绝对值
float xValue = Math.abs(event.values[0]);
float yValue = Math.abs(event.values[1]);
float zValue = Math.abs(event.values[2]);
if (xValue > 15 || yValue > 15 || zValue > 15) {
// 认为用户摇动了手机,触发摇一摇逻辑
Toast.makeText(MainActivity.this, "摇一摇", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.i(TAG, "on accuracy change: " + accuracy);
}
};
五、 在onDestory方法调用unregisterListener()方法来释放使用的资源。
@Override
protected void onDestroy() {
super.onDestroy();
if (sm != null) {
sm.unregisterListener(LightListener);
sm.unregisterListener(AcclerListener);
}
}
六、 显示结果:
- 所有传感器的打印日志:
allsensors: 27
name: Accelerometer, vendor: STMicroelectronics, version: 1
name: Magnetometer, vendor: AKM, version: 1
name: Magnetometer Uncalibrated, vendor: AKM, version: 1
name: Gyroscope, vendor: STMicroelectronics, version: 1
name: Gyroscope Uncalibrated, vendor: STMicroelectronics, version: 1
name: Proximity Sensor, vendor: TAOS, version: 1
name: Ambient Light Sensor, vendor: TAOS, version: 1
name: Barometer Sensor, vendor: BOSCH, version: 1
name: Temperature Sensor, vendor: BOSCH, version: 1
name: Gravity, vendor: Qualcomm, version: 1
name: Linear Acceleration, vendor: Qualcomm, version: 1
name: Rotation Vector, vendor: Qualcomm, version: 1
name: Step Detector, vendor: Qualcomm, version: 1
name: Step Counter, vendor: Qualcomm, version: 1
name: Significant Motion Detector, vendor: Qualcomm, version: 1
name: Game Rotation Vector, vendor: Qualcomm, version: 1
name: Geomagnetic Rotation Vector, vendor: Qualcomm, version: 1
name: Orientation, vendor: Qualcomm, version: 1
name: AMD, vendor: Qualcomm, version: 1
name: RMD, vendor: Qualcomm, version: 1
name: Basic Gestures, vendor: Qualcomm, version: 1
name: Facing, vendor: Qualcomm, version: 1
name: Tilt, vendor: Qualcomm, version: 1
name: Pedometer, vendor: Qualcomm, version: 1
name: PEDESTRIAN-ACTIVITY-MONITOR, vendor: Qualcomm, version: 1
name: Motion Accel, vendor: Qualcomm, version: 1
name: Temperature Sensor, vendor: BOSCH, version: 1
友情链接
- 测试用例的源代码下载 访问密码 5760