上篇博客,我们已经介绍了传感器的一般用法,今天我们就来介绍一下常用的传感器吧。常用的传感器有:
- 方向传感器 Orientation (现在几乎已经不用了,因为其实不存在真正的方向)
- 磁场传感器 Magnetic Field
- 温度传感器 Temperature
- 光传感器 Light
- 压力传感器 Pressure
1.方向传感器 Orientation:
用途:
方向传感器用于感应手机设备的摆放状态。比如手机顶部的朝向,手机目前的倾斜角度等:借助于方向传感器,可以开发指南针、水平仪。(注:现在我们一般不用方向传感器来做指南针)方向传感器返回的三个角度说明:
- 第一个:表示手机顶部朝向与正北方的夹角。(比如手机绕Z轴旋转时,该角度发生变化)
- 第二个:表示手机顶部或底部翘起的角度(比如手机绕X轴倾斜时,该角度值变化-180~180,手机顶部抬起变负值)
- 第三个:表示表示手机左侧或右侧翘起的角度(当手机绕Y轴倾斜时,该角度值发生变化范围-90~90,左侧抬起变负值)
2.磁场传感器 Magnetic Field:
- 用途:
用于读取手机设备外部的磁场强度。随着手机设备摆放状态的改变,周围磁场在手机的X,Y,Z三个方向上的影响会发生改变。
磁场传感器会返回三个数据: 分别代表周围磁场分解到X,Y,Z三个方向上的磁场分量。
这里就不详细介绍了,后面我们用指南针的实例一起来介绍磁场传感器的使用吧。
3.温度传感器 Temperature :
- 用途:
温度传感器用于获得手机设备所处环境的温度。
温度传感器会返回一个数据,该数据代表手机设备周围的温度,单位是摄氏度。
4.光传感器 Light:
- 用途:
用于获得手机设备所处环境的光的强度。
返回一个数据,代表手机设备周围的光的强度,该数据单位是勒克斯(lux)
5.压力传感器 Pressure:
- 用途:
用于获取手机设备所处环境的压力的大小。
返回一个数据,代表手机设备周围的压力的大小。
实例:
功能:这里利用几个文本框来显示不同的传感器的值。
sensorAcitivity:
package com.example.myapplication.activitys;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;import com.example.myapplication.R;import com.example.myapplication.baseactivity.BaseActivity;public class SensorActivity extends BaseActivity implements SensorEventListener{//2.必须实现接口 private TextView mTextviewOri; private TextView mTextviewlight; private TextView mTextviewcichang; private TextView mTextviewtemp; private TextView mTextviewpressure; private SensorManager mSensorManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sensor); mTextviewOri = (TextView) findViewById(R.id.textori); mTextviewlight = (TextView) findViewById(R.id.textlight); mTextviewcichang = (TextView) findViewById(R.id.textcichang); mTextviewtemp = (TextView) findViewById(R.id.texttemper); mTextviewpressure = (TextView) findViewById(R.id.textpressure); //1.获得传感器管理服务 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { super.onResume(); //3.为系统的方向传感器注册监听器 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_AMBIENT_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); } /** * 下面两个方法是实现接口不许实现的方法 * @param event */ @Override public void onSensorChanged(SensorEvent event) {//4.获得数据进行操作 float[] values = event.values; int sensorType = event.sensor.getType();//获取触发event的传感器类型 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]); mTextviewOri.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]); mTextviewcichang.setText(sb.toString()); break; //温度传感器 case Sensor.TYPE_AMBIENT_TEMPERATURE: sb = new StringBuilder(); sb.append("当前温度:"); sb.append(values[0]); mTextviewtemp.setText(sb.toString()); break; //光传感器 case Sensor.TYPE_LIGHT: sb = new StringBuilder(); sb.append("当前光强度:"); sb.append(values[0]); mTextviewlight.setText(sb.toString()); break; //压力传感器 case Sensor.TYPE_PRESSURE: sb = new StringBuilder(); sb.append("当前压力:"); sb.append(values[0]); mTextviewpressure.setText(sb.toString()); break; } } @Override //传感器精度改变时回调的方法 public void onAccuracyChanged(Sensor sensor, int accuracy) { } @Override protected void onPause() { //程序暂停时取消注册传感器监听器 mSensorManager.unregisterListener(this); super.onPause(); } @Override protected void onStop() { //程序停止时取消传感器监听器 mSensorManager.unregisterListener(this); super.onStop(); }}
布局:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" tools:context="com.example.myapplication.activitys.SensorActivity"><LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="方向传感器" android:padding="10dp" android:background="#550000ff"/> <TextView android:id="@+id/textori" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#ffffff"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="磁场传感器" android:padding="10dp" android:background="#550000ff"/> <TextView android:id="@+id/textcichang" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#ffffff"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="温度传感器" android:padding="10dp" android:background="#550000ff"/> <TextView android:id="@+id/texttemper" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#ffffff"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="光传感器" android:padding="10dp" android:background="#550000ff"/> <TextView android:id="@+id/textlight" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#ffffff"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="压力传感器" android:padding="10dp" android:background="#550000ff"/> <TextView android:id="@+id/textpressure" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:background="#ffffff"/></LinearLayout></ScrollView>
效果:
说明:
实际上,上面的数据模拟时都是变化的,但手机其实是没有动位置的,所以我还不知道是哪里的问题呢,望知道的大神指教。^^
还有,可以看出,该程序不能获取传感器和压力传感器的值,这是因为我的手机并不支持温度传感器和压力传感器的读取。