关闭

Sensors传感器介绍(一)

标签: android
231人阅读 评论(0) 收藏 举报
分类:

Develop > API Guides > Location and Sensors > Sensor OverView

传感器介绍

大多数android设备都配备了传感器以测量动作、方向、环境参数等。
Android设备支持三大类的传感器:

  1. Motion sensors 动作传感器
    这些传感器在三维上测量加速力和转动力,包括accelerometers(加速计),gravity sensors(重力感应器),gyroscopes(陀螺仪),rotational vector sensor(旋转向量)。

  2. Environmental sensors环境感应器
    测量各种环境参数,比如周围的空气温度、气压、照明、湿度。这类包括barometers(气压计),photometers(光度计),thermometers(温度计)。

  3. Position sensors 位置感应器
    这类传感器测量设备的物理位置。包括orientation sensors(方向传感器)和magnetometers(磁力仪)。

传感器的使用

SensorManager可以让我们获得设备的传感器,通过在onCreate()方法中调用 Context.getSystemService(Context.SENSOR_SERVICE)可以获得它的实例。

确保在不需要的时候关闭了传感器,尤其是当activity被挂起的时候。不这样做电量会很快用完。记住,即使屏幕关闭系统也不会自动关闭传感器。

例一:距离传感器

import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.provider.Settings;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements SensorEventListener {
    private Button button;
    private TextView textView;
    private SensorManager manager;
    private Sensor sensor;

    // 第一个传感器:距离传感器
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        button = (Button) this.findViewById(R.id.button1);
        textView = (TextView) this.findViewById(R.id.textView1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                List<Sensor> list = manager.getSensorList(Sensor.TYPE_ALL);
                for (Sensor sensor : list) {
                    textView.append("" + sensor.getName() + "\n");
                }
            }
        });
         //目前传感器的类型是:距离传感器:远、近
         sensor = manager.getDefaultSensor(Sensor.TYPE_PROXIMITY);

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        manager.registerListener(this, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        manager.unregisterListener(this, sensor);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        // 获得传感器的数据
         final float distance = event.values[0];
         textView.setText("距离是:" + distance + " cm"+"\n");

    }


    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

}

在手机上安装app后,会先看到这样的界面:
这里写图片描述
点击button后,
这里写图片描述

例二:方向传感器

import java.util.List;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.provider.Settings;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements SensorEventListener {
    private TextView textView;
    private SensorManager manager;
    private Sensor sensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        textView = (TextView) this.findViewById(R.id.textView1);
        // 罗盘传感器:
         sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        manager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        manager.unregisterListener(this, sensor);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated 
        // 获得方向传感器的数据:单位是 度
        // 方位角 围绕 z轴,y轴与北磁场先之间的夹角
        // 0 = 北 90 = 东 180=南 270 = 西
         final float value = event.values[0];
         if (value >= 0 && value < 45) {
         textView.setText("北偏东" + value + "度");
         } else if (value >= 45 && value < 90) {
         textView.setText("东偏北" + (value - 45) + "度");
         } else if (value >= 90 && value < 135) {
         textView.setText("东偏南" + (value - 90) + "度");
         } else if (value >= 135 && value < 180) {
         textView.setText("南偏东" + (value - 135) + "度");
         } else if (value >= 180 && value < 225) {
         textView.setText("南偏西" + (value - 180) + "度");
         } else if (value >= 225 && value < 270) {
         textView.setText("西偏南" + (value - 225) + "度");
         } else if (value >= 270 && value < 315) {
         textView.setText("西偏北" + (value - 270) + "度");
         } else if (value >= 315 && value < 359) {
         textView.setText("北偏西" + (value - 315) + "度");
         }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

}

运行后界面
这里写图片描述

源码下载:Sensor传感器介绍实例:距离传感器与方向传感器

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5796次
    • 积分:218
    • 等级:
    • 排名:千里之外
    • 原创:14篇
    • 转载:14篇
    • 译文:1篇
    • 评论:1条
    文章分类
    最新评论