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