关于高德地图问题总结 (三)位置传感器的使用

在第一篇文章中我们介绍了使用高德定位,并且在初始化中设置了方位变化更新,但是高德地图更新为3秒,效果不明显

设置代码为

option.setSensorEnable(true);

继而开始往系统自带的传感器进行靠拢,发现有个方位传感器目前已不推荐使用,但是无奈凑合使用,下面写一下使用的流程总结,仅供参考

1、监听器的种类

1.方向传感器(Orientation sensor)

2.加速感应器(Accelerometer sensor)

3.陀螺仪传感器(Gyroscope sensor)

4.磁场传感器(Magnetic field sensor)

5.距离传感器(Proximity sensor)

6.光线传感器(Light sensor)

7.气压传感器(Pressure sensor)

8.温度传感器(Temperature sensor)

9.重力感应器(Gravity sensor,Android 2.3引入)

10.线性加速感应器(Linear acceleration sensor ,Android 2.3引入)

11.旋转矢量传感器(Rotation vector sensor,Android 2.3引入)

12.相对湿度传感器(Relative humidity sensor,Android 4.0引入)

13.近场通信(NFC)传感器(Android 2.3引入),NFC和其他不一样,具有读写功能。

 

2、在初始化方法中进行传感器的初始化

//传感器对象
private SensorManager sm;


获取SensorManager实例
sm = (SensorManager) getSystemService(SENSOR_SERVICE);

设置监听回调方法
/**
 *第一个参数:SensorEventListener接口的实例对象
 *第二个参数:需要注册的传感器实例
 *第三个参数:传感器获取传感器事件event值频率:
 *              SensorManager.SENSOR_DELAY_FASTEST = 0:对应0微秒的更新间隔,最快,1微秒 = 1 % 1000000秒
 *              SensorManager.SENSOR_DELAY_GAME = 1:对应20000微秒的更新间隔,游戏中常用
 *              SensorManager.SENSOR_DELAY_UI = 2:对应60000微秒的更新间隔
 *              SensorManager.SENSOR_DELAY_NORMAL = 3:对应200000微秒的更新间隔
 *              键入自定义的int值x时:对应x微秒的更新间隔
 *
 */
sm.registerListener(MainActivity.this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
        SensorManager.SENSOR_DELAY_FASTEST);

3、实现 SensorEventListener的监听方法onAccuracyChanged()和 onSensorChanged();

private float currentDegree = 0f;
/**
 * @description 方向传感器报告新的值(方向改变)
 * @param event
 */
@Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
        float degree = event.values[0];
      /*
      RotateAnimation类:旋转变化动画类
      参数说明:
      fromDegrees:旋转的开始角度。
      toDegrees:旋转的结束角度。
      pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
      pivotXValue:X坐标的伸缩值。
      pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
      pivotYValue:Y坐标的伸缩值
      */
      if(currentDegree != degree){
          RotateAnimation ra = new RotateAnimation(currentDegree, degree,
                  Animation.RELATIVE_TO_SELF, 0.5f,
                  Animation.RELATIVE_TO_SELF, 0.5f);
          //旋转过程持续时间
          ra.setDuration(300);
          currentDegree = degree;
          if (mapview != null) {
              if (myLng != 0 && myLat != 0) {
                  mapview.setLocationPoint(myLng, myLat, ra,0);
              }
          }
      }
    }
}

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

}

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值