Android常用传感器

jopen 11年前

在本文中将介绍其余几种传感器,它们的处理方式完全一样。这里就只用真机进行测试了。

1、方向传感器:返回三个角度

第一个角度:表示手机顶部朝向与正北方的夹角。范围0~360

第二个角度:表示手机顶部或尾部翘起的角度。范围-180~180

第三个角度:表示手机左侧或右侧翘起的角度。范围-90~90

2、磁场传感器:返回三个数据,分别代表周围磁场分解到X、Y、Z三个方向上的分量。

3、温度传感器:返回一个数据,表示手机设备周围温度。

4、光传感器:返回一个数据,表示手机设备周围的光的强度。

5、压力传感器:返回一个数据,表示手机设备周围的压力大小。

下面用一个简单示例来演示它们的使用,代码如下:

Activity:

    package com.home.sensor;                import android.hardware.Sensor;        import android.hardware.SensorEvent;        import android.hardware.SensorEventListener;        import android.hardware.SensorManager;        import android.os.Bundle;        import android.widget.EditText;        import android.app.Activity;                public class SensorTestActivity extends Activity implements SensorEventListener {            // 定义真机的传感器管理器            private SensorManager mSensorManager;            private EditText orientation;            private EditText magnetic;            private EditText temerature;            private EditText light;            private EditText pressure;                    @Override            protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.main);                // 获取界面上的EditText组件                orientation = (EditText) findViewById(R.id.main_et_orientation);                magnetic = (EditText) findViewById(R.id.main_et_magnetic);                temerature = (EditText) findViewById(R.id.main_et_temerature);                light = (EditText) findViewById(R.id.main_et_light);                pressure = (EditText) findViewById(R.id.main_et_pressure);                // 获取真机的传感器管理服务                mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);            }                    @Override            protected void onResume() {                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 onPause() {                super.onPause();                // 程序暂停时取消注册传感器监听器                mSensorManager.unregisterListener(this);            }                    @Override            public void onAccuracyChanged(Sensor sensor, int accuracy) {            }                    @Override            public void onSensorChanged(SensorEvent event) {                float[] values = event.values;                StringBuffer sb = null;                switch (event.sensor.getType()) {                // 方向传感器                case Sensor.TYPE_ORIENTATION:                    sb = new StringBuffer();                    sb.append("绕Z轴转过的角度:" + values[0]);                    sb.append("\n绕X轴转过的角度:" + values[1]);                    sb.append("\n绕Y轴转过的角度:" + values[2]);                    orientation.setText(sb.toString());                    break;                // 磁场传感器                case Sensor.TYPE_MAGNETIC_FIELD:                    sb = new StringBuffer();                    sb.append("X方向上的磁场分量:" + values[0]);                    sb.append("\nY方向上的磁场分量:" + values[1]);                    sb.append("\nZ方向上的磁场分量:" + values[2]);                    magnetic.setText(sb.toString());                    break;                // 温度传感器                case Sensor.TYPE_TEMPERATURE:                    sb = new StringBuffer();                    sb.append("当前温度为:" + values[0]);                    temerature.setText(sb.toString());                    break;                // 光传感器                case Sensor.TYPE_LIGHT:                    sb = new StringBuffer();                    sb.append("当前光的强度:" + values[0]);                    light.setText(sb.toString());                    break;                // 压力传感器                case Sensor.TYPE_PRESSURE:                    sb = new StringBuffer();                    sb.append("当前压力为:" + values[0]);                    pressure.setText(sb.toString());                    break;                }            }        }  
布局XML:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="vertical" >                    <EditText                android:id="@+id/main_et_orientation"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:editable="false" />                    <EditText                android:id="@+id/main_et_magnetic"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:editable="false" />                    <EditText                android:id="@+id/main_et_temerature"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:editable="false" />                    <EditText                android:id="@+id/main_et_light"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:editable="false" />                    <EditText                android:id="@+id/main_et_pressure"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:editable="false" />                </LinearLayout>  

来自:http://blog.csdn.net/u010142437/article/details/9375197