啟動SAILS引擎
宣告SAILS與 SAILSMapView物件
在onCreate或是onCreateView中建立一個SAILS物件與一個SAILSMapView物件:
mSails = new SAILS(activity);
mSailsMapView = new SAILSMapView(activity);
SAILS類別整合了定位引擎與路徑規劃引擎,SAILSMapView類別則為向量地圖顯示引擎。 透過以下設定,SAILSMapView可以自動與SAILS相互溝通:
mSailsMapView.setSAILSEngine(mSails);
WiFi / BLE 定位模式選擇
僅有SAILS Android SDK可進行WiFi/BLE定位的選擇,iOS由於不開放WiFi Scan函式庫,故無法使用WiFi定位。
//BLE Positioning
mSails.setMode(SAILS.BLE_GFP_IMU);
//WiFi Positioning
mSails.setMode(SAILS.WIFI_GFP_IMU);
從SAILS Cloud 載入室內定位專案
當您在SAILS Cloud建立專案並完成了地圖繪製與定位佈建,即可於SDK中透過loadCloudBuilding函式將該專案載入,token與building ID獲取方式請參考第一章簡介。
mSails.loadCloudBuilding(token, buildingId, new SAILS.OnFinishCallback() {
@Override
public void onSuccess(String response) {
if (getActivity() == null)
return;
new Thread(new Runnable() {
@Override
public void run() {
// do something if load building successfully
if (getActivity() == null)
return;
startLocatingEngine();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// do UI things in UI Thread
mapViewInitial();
progressdg.dismiss();
}
});
}
}).start();
}
@Override
public void onFailed(String response) {
progressdg.dismiss();
// show error dialog
}
});
在呼叫loadCloudBuilding時會連接網路至SAILS Cloud下載您最新的室內定位專案檔案,若此時用戶無網路,則會載入上次已載入的版本。因此,用戶第一次打開APP仍需要連網才可以下載使用。只要下載完成後,接下來使用SAILS SDK提供的服務(地圖顯示、定位、路徑規劃)都不再需要連網。
請注意,若在onSuccess()與onFail()中有更動UI,請另建UI Thread。例如向量地圖顯示引擎即為UI相關元件,須在UI Thread中呼叫。
啟動引擎
成功載入定位專案後,即可打開定位引擎與向量地圖顯示引擎。
定位引擎:
mSails.startLocatingEngine();
向量地圖的部分可以先確認SAILS物件中有樓層物件,然後讓mSailsMapView載入第一個樓層物件,如下:
if (!mSails.getFloorNameList().isEmpty()) {
mSailsMapView.loadFloorMap(mSails.getFloorNameList().get(0));
}
取得用戶所在位置
SAILS SDK並不提供座標,有關定位點在地圖的顯示都包含在SDK裡,開發者並不需要特別設定。 若需要取得用戶目前所在區域,可透過
List<LocationRegions> list = mSails.getCurrentInRegions();
來取得,這裡留意會用list方式表示的原因為用戶所在的區域可能被數個LocationRegion涵蓋。
APP離開或進入時定位引擎的設定
目前SAILS定位引擎僅支援前景定位,故在Activity中的onPuase()與onResume()需加入讓定位引擎暫停與繼續的指令。
onPause()
if (mSails != null) {
if (mSails.isLocationEngineStarted()) {
locationStart = true;
} else {
locationStart = false;
}
mSails.stopLocatingEngine();
}
locationStart將引擎是否啟動的狀態記錄下來,以便onResume()時判斷是否打開定位引擎。
onResume()
if (mSails != null && locationStart) {
mSails.startLocatingEngine();
}