Android的常用传感器

Android有哪些常用的传感器,之前还真的完全不清楚,指南针我就在手机见过,用的应该是方向传感器,其实Android提供的传感器有以下几种:

1.方向传感器Orientation

2.磁场传感器Megnetic Field

3.温度传感器Temperature

4.光传感器Light

5.压力传感器Pressure

下面一个简单的实例来介绍这些传感器用法:

创建项目:SensorSimulatorTest

项目运行结果:

Android的常用传感器_第1张图片

以上是利用传感器模拟器所产生的结果

关于传感器模拟器SensorSimulator需要登录http://code.googel.com/p/openintents/wiki/SensorSimulator站点,下载SensorSimulator的最新版本。

我下载的最新版本是:2.0-rc1.

关于这个模拟器的使用就不再介绍,具体的请参考:疯狂Android讲义第15章传感器应用开发

下载的文件目录下bin包含该工具的PC端程序和手机端程序

PC端:

Android的常用传感器_第2张图片

手机端:

Android的常用传感器_第3张图片

关键代码:

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 stubfloat[] 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"/>


更多相关文章

  1. [实战示例] 带您深入探讨 Android 传感器【附源码】
  2. android studio中光线传感器解析
  3. Android中传感器Sensor的使用
  4. Android学习 2 -建立模拟器
  5. Android笔记二十三.Android基于事件监听器处理机制
  6. CAMERA(12)---[Android相机]光线传感器识别环境光亮强度
  7. MonkeyRunner与模拟器连接

随机推荐

  1. Android消息处理机制、Hanlder机制(Handle
  2. Android 检测键盘显示或隐藏键盘的实现代
  3. Android(安卓)开发遇到的问题
  4. Android的文件监控系统不可靠
  5. android屏幕触摸事件机制
  6. Android Binder 面试知识小结
  7. Android 更新UI的两种方法——handler和r
  8. android的软盘影响背景问题
  9. 如何解决android studio 运行时中文乱码
  10. Android 各 API Level 权限变更和功能限