Android的常用传感器
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"/>