Android常用传感器
- - CSDN博客推荐文章在上文中介绍了加速度传感器,并以真机和模拟器两种方式进行了测试. 在本文中将介绍其余几种传感器,它们的处理方式完全一样. 1、方向传感器:返回三个角度. 第一个角度:表示手机顶部朝向与正北方的夹角. 第二个角度:表示手机顶部或尾部翘起的角度. 第三个角度:表示手机左侧或右侧翘起的角度. 2、磁场传感器:返回三个数据,分别代表周围磁场分解到X、Y、Z三个方向上的分量.
在上文中介绍了加速度传感器,并以真机和模拟器两种方式进行了测试。在本文中将介绍其余几种传感器,它们的处理方式完全一样。这里就只用真机进行测试了。
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>