您好,登錄后才能下訂單哦!
前面已經實現了利用百度地圖進行定位的功能,定位只是一個基本的依托,現在我們可以利用它來做更多的東西,例如位置提醒服務。在定位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){
//監聽范圍內所做的提醒功能
}
}
...
}
這樣,基本的位置提醒服務已經完成,接下來要實現的是,在監聽范圍內所要做的動作(這里實現的是手機震動功能)。
二、實現提醒范圍內的手機震動功能:
首先,要在AndroidManifest.xml文件中添加允許手機震動的權限:
<uses-permission android:name="android.permission.VIBRATE" />
接下來就可以直接在主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。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。