W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
開發(fā)者可以調(diào)用 HarmonyOS 位置相關(guān)接口,獲取設(shè)備實時位置,或者最近的歷史位置。
對于位置敏感的應(yīng)用業(yè)務(wù),建議獲取設(shè)備實時位置信息。如果不需要設(shè)備實時位置信息,并且希望盡可能的節(jié)省耗電,開發(fā)者可以考慮獲取最近的歷史位置。
獲取設(shè)備的位置信息,所使用的接口說明如下。
接口名 | 功能描述 |
---|---|
Locator(Context context) | 創(chuàng)建 Locator 實例對象。 |
RequestParam(int scenario) | 根據(jù)定位場景類型創(chuàng)建定位請求的 RequestParam 對象。 |
onLocationReport(Location location) | 獲取定位結(jié)果。 |
startLocating(RequestParam request, LocatorCallback callback) | 向系統(tǒng)發(fā)起定位請求。 |
requestOnce(RequestParam request, LocatorCallback callback) | 向系統(tǒng)發(fā)起單次定位請求。 |
stopLocating(LocatorCallback callback) | 結(jié)束定位。 |
getCachedLocation() | 獲取系統(tǒng)緩存的位置信息。 |
系統(tǒng)提供的定位權(quán)限有:
訪問設(shè)備的位置信息,必須申請 ohos.permission.LOCATION 權(quán)限,并且獲得用戶授權(quán)。
如果應(yīng)用在后臺運行時也需要訪問設(shè)備位置,除需要將應(yīng)用聲明為允許后臺運行外,還必須申請 ohos.permission.LOCATION_IN_BACKGROUND 權(quán)限,這樣應(yīng)用在切入后臺之后,系統(tǒng)依然可以繼續(xù)上報位置信息。
開發(fā)者可以在應(yīng)用 config.json 文件中聲明所需要的權(quán)限,示例代碼如下:
{
"reqPermissions": [{
"name": "ohos.permission.LOCATION",
"reason": "$string:reason_description",
"usedScene": {
"ability": ["com.myapplication.LocationAbility"],
"when": "inuse"
}, {
...
}]
}]
}
說明
配置字段詳細(xì)說明見權(quán)限開發(fā)指導(dǎo)。在使用系統(tǒng)位置能力時,向用戶動態(tài)申請位置權(quán)限,申請方式請參考動態(tài)申請權(quán)限開發(fā)步驟。
Locator locator = new Locator(context);
其中入?yún)⑿枰峁┊?dāng)前應(yīng)用程序的 AbilityInfo 信息,便于系統(tǒng)管理應(yīng)用的定位請求。
方式一:
為了面向開發(fā)者提供貼近其使用場景的 API 使用方式,系統(tǒng)定義了幾種常見的位置能力使用場景,并針對使用場景做了適當(dāng)?shù)膬?yōu)化處理,應(yīng)用可以直接匹配使用,簡化開發(fā)復(fù)雜度。系統(tǒng)當(dāng)前支持場景如下表所示。
場景名稱 | 常量定義 | 說明 |
---|---|---|
導(dǎo)航場景 | SCENE_NAVIGATION | 適用于在戶外定位設(shè)備實時位置的場景,如車載、步行導(dǎo)航。在此場景下,為保證系統(tǒng)提供位置結(jié)果精度最優(yōu),主要使用 GNSS 定位技術(shù)提供定位服務(wù),結(jié)合場景特點,在導(dǎo)航啟動之初,用戶很可能在室內(nèi)、車庫等遮蔽環(huán)境, GNSS 技術(shù)很難提供位置服務(wù)。為解決此問題,我們會在 GNSS 提供穩(wěn)定位置結(jié)果之前,使用系統(tǒng)網(wǎng)絡(luò)定位技術(shù),向應(yīng)用提供位置服務(wù),以在導(dǎo)航初始階段提升用戶體驗。此場景默認(rèn)以最小 1 秒間隔上報定位結(jié)果,使用此場景的應(yīng)用必須申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
軌跡跟蹤場景 | SCENE_TRAJECTORY_TRACKING | 適用于記錄用戶位置軌跡的場景,如運動類應(yīng)用記錄軌跡功能。主要使用 GNSS 定位技術(shù)提供定位服務(wù)。此場景默認(rèn)以最小 1 秒間隔上報定位結(jié)果,并且應(yīng)用必須申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
出行約車場景 | SCENE_CAR_HAILING | 適用于用戶出行打車時定位當(dāng)前位置的場景,如網(wǎng)約車類應(yīng)用。此場景默認(rèn)以最小 1 秒間隔上報定位結(jié)果,并且應(yīng)用必須申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
生活服務(wù)場景 | SCENE_DAILY_LIFE_SERVICE | 生活服務(wù)場景,適用于不需要定位用戶精確位置的使用場景,如新聞資訊、網(wǎng)購、點餐類應(yīng)用,做推薦、推送時定位用戶大致位置即可。此場景默認(rèn)以最小 1 秒間隔上報定位結(jié)果,并且應(yīng)用至少申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
無功耗場景 | SCENE_NO_POWER | 無功耗場景,適用于不需要主動啟動定位業(yè)務(wù)。系統(tǒng)在響應(yīng)其他應(yīng)用啟動定位業(yè)務(wù)并上報位置結(jié)果時,會同時向請求此場景的應(yīng)用程序上報定位結(jié)果,當(dāng)前的應(yīng)用程序不產(chǎn)生定位功耗。此場景默認(rèn)以最小 1 秒間隔上報定位結(jié)果,并且應(yīng)用需要申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
以導(dǎo)航場景為例,實例化方式如下:
RequestParam requestParam = new RequestParam(RequestParam.SCENE_NAVIGATION);
方式二:
如果定義的現(xiàn)有場景類型不能滿足所需的開發(fā)場景,系統(tǒng)提供了基本的定位優(yōu)先級策略類型。
策略類型 | 常量定義 | 說明 |
---|---|---|
定位精度優(yōu)先策略 | PRIORITY_ACCURACY | 定位精度優(yōu)先策略主要以 GNSS 定位技術(shù)為主,在開闊場景下可以提供納米級的定位精度,具體性能指標(biāo)依賴用戶設(shè)備的定位硬件能力,但在室內(nèi)等強(qiáng)遮蔽定位場景下,無法提供準(zhǔn)確的位置服務(wù)。應(yīng)用必須申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
快速定位優(yōu)先策略 | PRIORITY_FAST_FIRST_FIX | 快速定位優(yōu)先策略會同時使用GNSS定位、基站定位和 WLAN、藍(lán)牙定位技術(shù),以便室內(nèi)和戶外場景下,通過此策略都可以獲得位置結(jié)果,當(dāng)各種定位技術(shù)都有提供位置結(jié)果時,系統(tǒng)會選擇其中精度較好的結(jié)果返回給應(yīng)用。因為對各種定位技術(shù)同時使用,對設(shè)備的硬件資源消耗較大,功耗也較大。應(yīng)用必須申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
低功耗定位優(yōu)先策略 | PRIORITY_LOW_POWER | 低功耗定位優(yōu)先策略主要使用基站定位和 WLAN、藍(lán)牙定位技術(shù),也可以同時提供室內(nèi)和戶外場景下的位置服務(wù),因為其依賴周邊基站、可見 WLAN、藍(lán)牙設(shè)備的分布情況,定位結(jié)果的精度波動范圍較大,如果對定位結(jié)果精度要求不高,或者使用場景多在有基站、可見 WLAN、藍(lán)牙設(shè)備高密度分布的情況下,推薦使用,可以有效節(jié)省設(shè)備功耗。應(yīng)用至少申請 ohos.permission.LOCATION 權(quán)限,同時獲得用戶授權(quán)。 |
以定位精度優(yōu)先策略為例,實例化方式如下:
RequestParam requestParam = new RequestParam(RequestParam.PRIORITY_ACCURACY,0,0);
后兩個入?yún)⒂糜谙薅ㄏ到y(tǒng)向應(yīng)用上報定位結(jié)果的頻率,分別為位置上報的最小時間間隔,和位置上報的最小距離間隔,開發(fā)者可以參考 API 具體說明進(jìn)行開發(fā)。
應(yīng)用需要自行實現(xiàn)系統(tǒng)定義好的回調(diào)接口,并將其實例化。系統(tǒng)在定位成功確定設(shè)備的實時位置結(jié)果時,會通過 onLocationReport 接口上報給應(yīng)用。應(yīng)用程序可以在 onLocationReport 接口的實現(xiàn)中完成自己的業(yè)務(wù)邏輯。
MyLocatorCallback locatorCallback = new MyLocatorCallback();
public class MyLocatorCallback implements LocatorCallback {
@Override
public void onLocationReport(Location location) {
}
@Override
public void onStatusChanged(int type) {
}
@Override
public void onErrorReport(int type) {
}
}
locator.startLocating(requestParam, locatorCallback);
如果應(yīng)用不需要持續(xù)獲取位置結(jié)果,可以使用如下方式啟動定位,系統(tǒng)會上報一次實時定位結(jié)果后,自動結(jié)束應(yīng)用的定位請求。應(yīng)用不需要執(zhí)行結(jié)束定位。
locator.requestOnce(requestParam, locatorCallback);
locator.stopLocating(locatorCallback);
如果應(yīng)用使用場景不需要實時的設(shè)備位置,可以獲取系統(tǒng)緩存的最近一次歷史定位結(jié)果。
locator.getCachedLocation();
此接口的使用需要應(yīng)用向用戶申請 LOCATION 位置權(quán)限。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: