传感器与地理位置定位一

传感器简介: 传感器是一种微型的物理设备,能够探测感知外界的信号,并按照一定的规律转换成我们需要的信息.大多数Android设备有内置的传感器,并被用于测量运动、方向和各种环境条件。这些传感器能够提供高精度和准确的原始数据,我们可以使用这些传感器监控设备三维运动、旋转或者振幅。同样的,天气应用可能使用设备的温度传感器和湿度传感器的数据计算和报告揭露点,或者旅行应用可能是使用磁场传感器和加速度传感器来报告一个指南针方位。Android系统支持十余种传感器的类型,细分起来可分为三大类:
位置传感器:沿3个轴线测量加速度和旋转,这类传感器包含加速度、重力、矢量传感器和陀螺仪。
环境传感器:测量各种环境参数,例如周围的空气的温度和压力、光线以及湿度。这类传感器包含气压、光线和温度传感器。
位置传感器:测量设备的物理位置,这类传感器包含方向和磁力传感器
一般开发模式如下

package com.sdutacm.sensor;

import android.content.Context;
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;

public class MainActivity extends AppCompatActivity implements SensorEventListener{

    private SensorManager sensorManager;

    private Sensor sensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSensorManager();
    }


    @Override
    public void onSensorChanged(SensorEvent event) {
        //Sensor 发生变化时,在次通过event.values获取数据
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    public void getSensorManager() {
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        /**
         * 传入的参数决定传感器的类型
         * Senor.TYPE_ACCELEROMETER: 加速度传感器
         * Senor.TYPE_LIGHT:光照传感器
         * Senor.TYPE_GRAVITY:重力传感器
         * SenorManager.getOrientation(); //方向传感器
         */
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if(sensorManager != null){
            //一般在Resume方法中注册
            /**
             * 第三个参数决定传感器信息更新速度
             * SensorManager.SENSOR_DELAY_NORMAL:一般
             * SENSOR_DELAY_FASTEST:最快
             * SENSOR_DELAY_GAME:比较快,适合游戏
             * SENSOR_DELAY_UI:慢
             */
            sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(sensorManager != null){
            //解除注册
            sensorManager.unregisterListener(this,sensor);
        }
    }

}
原文地址:https://www.cnblogs.com/CCCrunner/p/11781875.html