设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...
以下內(nèi)容自定位 SDK V3.2.0 版本后支持。
第一步,創(chuàng)建地理圍欄
地理圍欄沒有最大個數(shù)限制,您可以無限制的創(chuàng)建圍欄。但請您根據(jù)業(yè)務(wù)需求合理的創(chuàng)建圍欄,控制圍欄個數(shù)可以有效的保證程序執(zhí)行效率。定位 SDK 提供根據(jù)高德POI、行政區(qū)劃,自定義圓形、多邊形四種方式創(chuàng)建地理圍欄。
1、創(chuàng)建地理圍欄對象
這里還包括設(shè)置一些基本參數(shù):
//實(shí)例化地理圍欄客戶端
GeoFenceClient mGeoFenceClient = new GeoFenceClient(getApplicationContext());
//設(shè)置希望偵測的圍欄觸發(fā)行為,默認(rèn)只偵測用戶進(jìn)入圍欄的行為
//public static final int GEOFENCE_IN 進(jìn)入地理圍欄
//public static final int GEOFENCE_OUT 退出地理圍欄
//public static final int GEOFENCE_STAYED 停留在地理圍欄內(nèi)10分鐘
mGeoFenceClient.setActivateAction(GEOFENCE_IN|GEOFENCE_OUT|GEOFENCE_STAYED);
2、創(chuàng)建高德POI地理圍欄
提供兩個創(chuàng)建高德POI圍欄的接口,一個是根據(jù)關(guān)鍵字創(chuàng)建POI圍欄,另一個是根據(jù)經(jīng)緯度進(jìn)行周邊搜索創(chuàng)建POI圍欄。
根據(jù)關(guān)鍵字創(chuàng)建圍欄
通過以下方法執(zhí)行POI關(guān)鍵字搜索并創(chuàng)建高德POI地理圍欄。
mGeoFenceClient.addGeoFence(String keyword, String poiType, String city, int size,String customId);
參數(shù)說明
參數(shù)說明示例
keywordPOI關(guān)鍵字例如:首開廣場
poiTypePOI類型例如:寫字樓
cityPOI所在的城市名稱例如:北京
customId與圍欄關(guān)聯(lián)的自有業(yè)務(wù)Id
示例代碼
mGeoFenceClient.addGeoFence("首開廣場","寫字樓","北京",1,"000FATE23(考勤打卡)");
根據(jù)周邊POI創(chuàng)建圍欄
通過以下方法執(zhí)行POI周邊搜索并創(chuàng)建高德POI地理圍欄。
mGeoFenceClient.addGeoFence(String keyword, String poiType, DPoint point, float aroundRadius, int size,String customId);
參數(shù)說明
參數(shù)說明示例
keywordPOI關(guān)鍵字例如:首開廣場
poiTypePOI類型例如:寫字樓
point周邊區(qū)域中心點(diǎn)的經(jīng)緯度,以此中心點(diǎn)建立周邊地理圍欄例如:北京
aroundRadius周邊半徑,0-50000米,默認(rèn)3000米
customId與圍欄關(guān)聯(lián)的自有業(yè)務(wù)Id
示例代碼
//創(chuàng)建一個中心點(diǎn)坐標(biāo)
DPoint centerPoint = new DPoint();
//設(shè)置中心點(diǎn)緯度
centerPoint.setLatitude(39.123D);
//設(shè)置中心點(diǎn)經(jīng)度
centerPoint.setLongitude(116.123D);
//執(zhí)行添加圍欄的操作
mGeoFenceClient.addGeoFence("肯德基","餐飲",centerPoint,1000F,10,"自有ID");
3、創(chuàng)建行政區(qū)劃圍欄
可根據(jù)行政區(qū)劃關(guān)鍵字創(chuàng)建行政區(qū)劃圍欄。
根據(jù)關(guān)鍵字創(chuàng)建圍欄
mGeoFenceClient.addGeoFence(String keyword, String customId);
參數(shù)說明
參數(shù)說明示例
keyword行政區(qū)劃關(guān)鍵字例如:朝陽區(qū)
customId與圍欄關(guān)聯(lián)的自有業(yè)務(wù)Id
示例代碼
mGeoFenceClient.addGeoFence("海淀區(qū)","00FDTW103(在北京海淀的化妝品促銷活動)");
4、創(chuàng)建自定義圍欄
自定義圍欄包含圓形圍欄、多邊形圍欄兩種,自定義圍欄一次接口調(diào)用只可以創(chuàng)建一個圍欄,創(chuàng)建多個自定義圍欄需要多次調(diào)用創(chuàng)建接口。
圓形圍欄
圓形圍欄需要提供中心點(diǎn),以及半徑。
mGeoFenceClient.addGeoFence(Point point,float radius, String customId);
參數(shù)說明
參數(shù)說明示例
point圍欄中心點(diǎn)
radius要創(chuàng)建的圍欄半徑 ,半徑無限制,單位米
customId與圍欄關(guān)聯(lián)的自有業(yè)務(wù)Id
示例代碼
/創(chuàng)建一個中心點(diǎn)坐標(biāo)
DPoint centerPoint = new DPoint();
//設(shè)置中心點(diǎn)緯度
centerPoint.setLatitude(39.123D);
//設(shè)置中心點(diǎn)經(jīng)度
centerPoint.setLongitude(116.123D);
mGeoFenceClient.addGeoFence (centerPoint,500F,"自有業(yè)務(wù)Id");
多邊形圍欄
mGeoFenceClient.addGeoFence(List points, String customId);
參數(shù)說明
參數(shù)說明示例
points多邊形的邊界坐標(biāo)點(diǎn),最少傳3個
customId與圍欄關(guān)聯(lián)的自有業(yè)務(wù)Id
示例代碼
List points = new ArrayList();
points.add(new DPoint(39.992702, 116.470470));
points.add(new DPoint(39.994387, 116.472498));
points.add(new DPoint(39.994478, 116.474161));
points.add(new DPoint(39.993163, 116.474504));
points.add(new DPoint(39.991363, 116.472605));
mGeoFenceClient.addGeoFence(points,"自有業(yè)務(wù)ID");
第二步,開始定位
當(dāng)圍欄創(chuàng)建完畢,且圍欄創(chuàng)建成功時會啟動定位,這部分無需您來設(shè)置,SDK內(nèi)部執(zhí)行。
啟動的定位機(jī)制:通過“遠(yuǎn)離圍欄時的超低頻定位策略”來降低電量消耗,“離近圍欄會逐漸提高定位頻率”,保證有足夠的定位精度來完成圍欄位置檢測。
需要注意,如果您希望程序在后臺持續(xù)檢測圍欄觸發(fā)行為,您務(wù)必要在應(yīng)用本地服務(wù)中啟動 GeoFenceClient,且確保這個本地服務(wù)一直存活。
下面介紹如何知道創(chuàng)建圍欄是成功還是失敗。
第三步,接收圍欄創(chuàng)建后的回調(diào)
圍欄創(chuàng)建完畢的信息會通過 GeoFenceListener 進(jìn)行回調(diào)。可以在回調(diào)中知道創(chuàng)建圍欄成功與否,以及查看所創(chuàng)建圍欄的具體內(nèi)容。
//創(chuàng)建回調(diào)監(jiān)聽
GeoFenceListener fenceListenter = new GeoFenceListener() {
@Override
public void onGeoFenceCreateFinished(List geoFenceList,
int errorCode) {
if(errorCode == GeoFence.ADDGEOFENCE_SUCCESS){//判斷圍欄是否創(chuàng)建成功
tvReult.setText("添加圍欄成功!!");
//geoFenceList是已經(jīng)添加的圍欄列表,可據(jù)此查看創(chuàng)建的圍欄
} else {
tvReult.setText("添加圍欄失敗!!");
}
}
};
mGeoFenceClient.setGeoFenceListener(fenceListenter);//設(shè)置回調(diào)監(jiān)聽
第四步,接收圍欄觸發(fā)行為廣播
用戶與圍欄位置發(fā)生變化的行為稱為圍欄觸發(fā)行為,圍欄觸發(fā)行為也是用戶進(jìn)入圍欄、退出圍欄、在圍欄內(nèi)停留這三種行為的統(tǒng)稱,行為的觸發(fā)是通過Android 的廣播進(jìn)行發(fā)送的。
圍欄觸發(fā)行為的廣播內(nèi)容是可選性的,在第一步“創(chuàng)建地理圍欄對象”中講到可以應(yīng)用 setActiveAction(int[] actions) 方法設(shè)置希望偵測到的圍欄觸發(fā)行為。
當(dāng)定位啟動后會馬上得到符合希望的所有圍欄的狀態(tài)檢測廣播,這些廣播會告訴上層邏輯每個圍欄和當(dāng)前用戶位置的初始狀態(tài)究竟是IN(定位點(diǎn)在圍欄里)還是OUT(定位點(diǎn)在圍欄外),這種廣播不是圍欄觸發(fā)行為廣播,是每個圍欄的初始狀態(tài)廣播,不會經(jīng)常收到,在有新的圍欄被創(chuàng)建,或者希望偵測的Action改變時會收到。接下來的每次廣播都是圍欄觸發(fā)行為廣播(當(dāng)然,觸發(fā)前提是位置和圍欄的關(guān)系發(fā)生了改變)。
1、創(chuàng)建并設(shè)置PendingIntent
//定義接收廣播的action字符串
public static final String GEOFENCE_BROADCAST_ACTION = "com.location.apis.geofencedemo.broadcast";
//創(chuàng)建并設(shè)置PendingIntent
mGeoFenceClient.createPendingIntent(GEOFENCE_BROADCAST_ACTION);
2、創(chuàng)建廣播監(jiān)聽
private BroadcastReceiver mGeoFenceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(GEOFENCE_BROADCAST_ACTION)) {
//解析廣播內(nèi)容
}
}
};
3、注冊廣播
IntentFilter filter = new IntentFilter(
ConnectivityManager.CONNECTIVITY_ACTION);
filter.addAction(GEOFENCE_BROADCAST_ACTION);
registerReceiver(mGeoFenceReceiver, filter);
4、解析廣播內(nèi)容
當(dāng)上一步完成之后,可以在第2步創(chuàng)建的監(jiān)聽器中在 onReceive 方法中對廣播內(nèi)容進(jìn)行解析。廣播內(nèi)容是通過 Bundle 進(jìn)行傳遞的。
//獲取Bundle
Bundle bundle = intent.getExtras();
//獲取圍欄行為:
int status = bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS);
//獲取自定義的圍欄標(biāo)識:
String customId = bundle.getString(GeoFence.BUNDLE_KEY_CUSTOMID);
//獲取圍欄ID:
String fenceId = bundle.getString(GeoFence.BUNDLE_KEY_FENCEID);
//獲取當(dāng)前有觸發(fā)的圍欄對象:
GeoFence fence = bundle.getParcelable(GeoFence.BUNDLE_KEY_FENCE);
最后,清除所有圍欄
當(dāng)不再需要使用圍欄時,可以調(diào)用以下代碼對已經(jīng)設(shè)定的圍欄進(jìn)行清除操作。
//會清除所有圍欄
mGeoFenceClient.removeGeoFence();
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Selenium UI 举例 getCs
- 下一篇: Android 在 Google 开发者