Android 传感器 (详解二)―― 常用传感器

来源:转载

 

方向传感器 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(绕x轴转过的角度:); sb.append(values[1]); sb.append(绕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(y方向上的角度:); sb.append(values[1]); sb.append(z方向上的角度:); 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(); }}

布局:

          

效果:

说明:
实际上,上面的数据模拟时都是变化的,但手机其实是没有动位置的,所以我还不知道是哪里的问题呢,望知道的大神指教。^^
还有,可以看出,该程序不能获取传感器和压力传感器的值,这是因为我的手机并不支持温度传感器和压力传感器的读取。


分享给朋友:
您可能感兴趣的文章:
随机阅读: