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("\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>

效果:
Android 传感器 (详解二)—— 常用传感器_第1张图片

Android 传感器 (详解二)—— 常用传感器_第2张图片

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

你可能感兴趣的:(android,传感器)