Android的常用传感器
Android有哪些常用的传感器,之前还真的完全不清楚,指南针我就在手机见过,用的应该是方向传感器,其实Android提供的传感器有以下几种:
1.方向传感器Orientation
2.磁场传感器Megnetic Field
3.温度传感器Temperature
4.光传感器Light
5.压力传感器Pressure
下面一个简单的实例来介绍这些传感器用法:
创建项目:SensorSimulatorTest
项目运行结果:
以上是利用传感器模拟器所产生的结果
关于传感器模拟器SensorSimulator需要登录http://code.googel.com/p/openintents/wiki/SensorSimulator站点,下载SensorSimulator的最新版本。
我下载的最新版本是:2.0-rc1.
关于这个模拟器的使用就不再介绍,具体的请参考:疯狂Android讲义第15章传感器应用开发
下载的文件目录下bin包含该工具的PC端程序和手机端程序
PC端:
手机端:
关键代码:
package org.wwj.sensor;
import org.openintents.sensorsimulator.hardware.Sensor;
import org.openintents.sensorsimulator.hardware.SensorEvent;
import org.openintents.sensorsimulator.hardware.SensorEventListener;
import org.openintents.sensorsimulator.hardware.SensorManagerSimulator;
import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;
public class SensorSimulatorTest extends Activity implements SensorEventListener{
// //定义真机的Sensor管理器
//private SensorManager mSensorManager;
//定义模拟器的Sensor管理器
private SensorManagerSimulator mSensorManager;
EditText etOrientation;
EditText etMagnetic;
EditText etTemerature;
EditText etLight;
EditText etPressure;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取界面上的EditText组件
etOrientation = (EditText) findViewById(R.id.etOrientation);
etMagnetic = (EditText) findViewById(R.id.etMagnetic);
etTemerature = (EditText) findViewById(R.id.etTemerature);
etLight = (EditText) findViewById(R.id.etLight);
etPressure = (EditText) findViewById(R.id.etPressure);
//获取真机的传感器管理服务
//mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
//获取传感器模拟器的传感器管理服务
mSensorManager = SensorManagerSimulator.getSystemService(this, SENSOR_SERVICE);
//连接传感器模拟器
mSensorManager.connectSimulator();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
//为系统的方向传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION)
, SensorManager.SENSOR_DELAY_GAME);
//为系统的磁场传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
, SensorManager.SENSOR_DELAY_GAME);
//为系统的温度传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE)
, SensorManager.SENSOR_DELAY_GAME);
//为系统的光传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT)
, SensorManager.SENSOR_DELAY_GAME);
//为系统的压力传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
, SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
//程序退出时取消注册传感器监听器
mSensorManager.unregisterListener(this);
super.onStop();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
//程序暂停时取消注册传感器监听器
mSensorManager.unregisterListener(this);
super.onPause();
}
//当传感器精度改变时回调该方法
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
float[] values = event.values;
真机上获取触发event的传感器类型
//int sensorType = event.sensor.getType();
//模拟器上获取触发event的传感器类型
int sensorType = event.type;
StringBuilder sb = null;
//判断是哪个传感器发生改变
switch(sensorType){
//方向传感器
case Sensor.TYPE_ORIENTATION:
sb = new StringBuilder();
sb.append("绕Z轴转过的角度: ");
sb.append(values[0]);
sb.append("\n绕X轴转过的角度: ");
sb.append(values[1]);
sb.append("\n绕Y周转过的角度: ");
sb.append(values[2]);
etOrientation.setText(sb.toString());
break;
case Sensor.TYPE_MAGNETIC_FIELD:
sb = new StringBuilder();
sb.append("X方向上的角度: ");
sb.append(values[0]);
sb.append("\nY方向上的角度: ");
sb.append(values[1]);
sb.append("\nZ方向上的角度: ");
sb.append(values[2]);
etMagnetic.setText(sb.toString());
break;
case Sensor.TYPE_TEMPERATURE:
sb = new StringBuilder();
sb.append("当前的温度是: ");
sb.append(values[0]);
etTemerature.setText(sb.toString());
break;
case Sensor.TYPE_PRESSURE:
sb = new StringBuilder();
sb.append("当前压力为: ");
sb.append(values[0]);
etPressure.setText(sb.toString());
break;
}
}
}
<!-- 通过模拟器调试需要访问网络 -->
<uses-permission android:name="android.permission.INTERNET"/>