百度地圖開放API初體驗(三)

    前面已經實現了利用百度地圖進行定位的功能,定位只是一個基本的依託,現在我們可以利用它來做更多的東西,例如位置提醒服務。在定位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。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章