百度地图开放API初体验(三)

2023-05-17,,

    前面已经实现了利用百度地图进行定位的功能,定位只是一个基本的依托,现在我们可以利用它来做更多的东西,例如位置提醒服务。在定位API的模块中,BDMap 还提供了一个地理围栏服务的板块,但是正如它里面介绍所说,目前只是一个Beta版本,博主登录过百度LBS的放平台论坛,看到上面所提及到的Bug仍然存在很多,所以这里不作这方面的介绍。在API当中,里面有一个位置提醒使用的介绍,本篇主要介绍这个功能。值得注意的是,这里为了显现定位提醒功能实现成功,在提醒服务里面增加了一个手机震动的功能。

    

一、实现位置提醒功能:

public class MainActivity<NotifyLister> extends Activity {

   ...

   public NotifyLister mNotifyer = null;//增加一个位置提醒的变量

   ...

   protected void onCreate(Bundle savedInstanceState) {

      ...

      initNotify();//使用一个定位提醒的函数,可以清晰分辨,下面会进行定义

      ...

  

    }

   //位置提醒相关代码

   private void initNotify() {

      mNotifyer = new NotifyLister();//定义位置提醒变量

      mNotifyer.SetNotifyLocation(latitude,longtitude,distance,"bd09ll");

      //4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型           (gcj02,gps,bd09,bd09ll)

      mLocationClient.registerNotify(mNotifyer);

      //注册位置提醒监听事件后,可以通过SetNotifyLocation俩修改位置提醒设置,修改后立刻生效


}

 

   //BDNotifyListener:位置提醒接口类,用于设定位置提醒

   public class NotifyLister extends BDNotifyListener{

      /**

      * onNotify(...): 位置提醒监听事件具体实现

      * mlocation表示当前位置,

      * distance是当前坐标中心点与设定位置提醒的坐标点之间的距离值。

      */

      public void onNotify(BDLocation mlocation, float distance){

  

         //监听范围内所做的提醒功能

}

}

   ...

}

    这样,基本的位置提醒服务已经完成,接下来要实现的是,在监听范围内所要做的动作(这里实现的是手机震动功能)。

二、实现提醒范围内的手机震动功能:

  1. 首先,要在AndroidManifest.xml文件中添加允许手机震动的权限:

    <uses-permission android:name="android.permission.VIBRATE" />

  2. 接下来就可以直接在主java文件中编辑添加震动代码:

public class MainActivity<NotifyLister> extends Activity {

   ...

   private Vibrator mVibrator;//添加控制手机震动的变量

   private long[] mTips = {1000,2000,1000,2000};//添加一个long型的数组,用来记录震动频率

   ...

  protected void onCreate(Bundle savedInstanceState) {

      ...

      

      mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);

      //给震动变量定义成一个手机可以提供的震动服务

      ...

     }

   public class NotifyLister extends BDNotifyListener{

      public void onNotify(BDLocation mlocation, float distance){

  

         mVibrator.vibrate(mTips, -1);

         //在提醒范围内增加手机震动功能,第一个参数定义震动频率,第二个参数定义震动的次数

}

}

    以上已经基本实现了BDMap所提供的位置提醒服务功能,但是有一点值得注意的是,在 

       mNotifyer.SetNotifyLocation(latitude,longtitude,distance,"bd09ll");

代码里面的参数,distance距离是以m作单位,但是前面两个是以百度坐标的经纬度作参数,在计算的时候不能简单的作加减,要在经纬度和距离作转换才可以直观地计算。幸好,在BDMap所提供的API中,也有一个可以实现经纬度和距离作转换的实现方式:

      LatLng p1 = new LatLng(x1, y1);//p1存放第一个点的经纬度,这里的x1,y1是经纬度,下同

      LatLng p2 = new LatLng(x2, y2);//p2存放第二个点的经纬度

      double distance = DistanceUtil.getDistance(p1, p2);//求两点间的距离,单位是m

    这里在应用DistanceUtil.getDistance()的时候要注意,自己是否已经下载了定位的计算工具SDK。

《百度地图开放API初体验(三).doc》

下载本文的Word格式文档,以方便收藏与打印。