android 实现手机方向识别

来源:互联网 发布:html5引导页源码 编辑:程序博客网 时间:2024/06/13 09:27
//自定义导航图标private BitmapDescriptor mIconLocation;//自定义传感器implements SensorEventListenerprivate MyOrientationListener myOrientationListener;//把监听的x方向的值存储到这里private float mCurrentX;
    //初始化图标        mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);        //初始化回调接口        myOrientationListener = new MyOrientationListener(getApplicationContext());        //设置回调接口        myOrientationListener.setOnOrientationListener(new OnOrientationListener() {            @Override            public void OnOrientationChanged(float x) {                // TODO Auto-generated method stub                //回调接口的值存入mCurrentX                mCurrentX=x;            }        });

在Activity的生命周期里面实现 与 方向识别的生命周期同步

start方法里面

    //方向识别开始        myOrientationListener.start();      

stop方法里面

//停止方向传感器        myOrientationListener.stop();

在本地数据设置里面

    MyLocationData data = new MyLocationData.Builder()    //设置方向    .direction(mCurrentX)//设置自定义图标        MyLocationConfiguration config = new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,                         true, mIconLocation);                mBaiduMap.setMyLocationConfigeration(config);

下面是传感器监听的实现代码

public class MyOrientationListener implements SensorEventListener{    //用来获取Seosor    private SensorManager mSensorManager;    private Sensor mSensor;    private Context mcontext;       private float lastX;    private OnOrientationListener mOnOrientationListener;    public MyOrientationListener(Context context) {        super();        context=this.mcontext;    }    @SuppressWarnings("deprecation")    //开启监听的方法    public void start(){            mSensorManager = (SensorManager) mcontext.getSystemService(Context.SENSOR_SERVICE);            if(mSensorManager!=null){            mSensor = mSensorManager.getDefaultSensor(SensorManager.SENSOR_ORIENTATION);                    }            if(mSensor!=null){            //注册监听                mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_UI);            }    }    //停止监听的方法    public void stop(){        mSensorManager.unregisterListener(this);    }    @Override    public void onAccuracyChanged(Sensor arg0, int arg1) {    }    @Override    public void onSensorChanged(SensorEvent event) {//拿到方向传感器       if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){            float x = event.values[SensorManager.DATA_X];            //如果移动超过一个精度则转向            if(Math.abs(x-lastX)>1.0){                if(mOnOrientationListener!=null){                    mOnOrientationListener.OnOrientationChanged(x);                }            }            lastX  =x;        }           }    public void setOnOrientationListener(OnOrientationListener mOnOrientationListener) {        this.mOnOrientationListener = mOnOrientationListener;    }//定义回调接口    public interface OnOrientationListener{    //传递改变的监听的x方向的值        void OnOrientationChanged(float x);    }}
0 0
原创粉丝点击