Sensors传感器介绍(一)

原创 2016年08月31日 15:09:46

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传感器介绍实例:距离传感器与方向传感器

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android开发指南---Sensors (传感器)介绍

在实际开发中我遇到一个让人很蛋疼的问题,大致是当我点击某一个按钮的时候,强制切换为横屏显示,这个很容易做到,只需在onclick里面调用setRequestedOrientation(Activity...

Composite sensors复合式传感器

Composite sensor type summary The following table lists the composite sensor types and their cate...

Android开发者指南-环境传感器-Environment Sensors[原创译文]

传感器: Environment Sensors 英文原文:http://developer.android.com/guide/topics/sensors/sensors_enviro...

android Motion Sensors 传感器 陀螺仪

Motion Sensors 英文原文:http://developer.android.com/guide/topics/sensors/sensors_motion.html 版本:A...

Base sensors and trigger modes基础传感器及其触发模式

Composite sensor type summary The following table lists the composite sensor types and their ...

Lm_sensors和相关技术介绍

http://blog.csdn.net/zhenwenxian/article/details/5331079 1 Lm_sensors和相关技术介绍 Lm_sensors是一套提供主机硬件信息...
  • beckdon
  • beckdon
  • 2014年06月23日 16:41
  • 475

Android API Guides---Location and Sensors APIs and Maps

Location and Sensors APIs 使用设备上的传感器,以丰富的位置和运动功能添加到您的应用程序,从GPS或网络位置,加速度计,陀螺仪,温度,气压计等。 位置和地图 一个屏幕有好...

ESP8266 ADC - Analog Sensors

http://www.instructables.com/id/ESP8266-ADC-Analog-Sensors/?ALLSTEPS ESP8266 modules have t...

Android官方文档之Location and Sensors APIs(上)

定位(Location) 和 传感器(Sensors)API充分发挥了移动设备的优势,您可以调用这些API,制作出交互性较高的应用程序...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sensors传感器介绍(一)
举报原因:
原因补充:

(最多只允许输入30个字)