使用位置控件
位置控件使用直觀且易懂的通用標(biāo)識,讓用戶明確地知道這是一個(gè)獲取位置信息的按鈕。這滿足了授權(quán)場景需要匹配用戶真實(shí)意圖的需求。只有當(dāng)用戶主觀愿意,并且明確了解使用場景后點(diǎn)擊位置控件,應(yīng)用才會獲得臨時(shí)的授權(quán),獲取位置信息并完成相應(yīng)的服務(wù)功能。
一旦應(yīng)用集成了位置控件,用戶點(diǎn)擊該控件后,無論應(yīng)用是否已經(jīng)申請過或被授予精準(zhǔn)定位權(quán)限,都會在本次前臺期間獲得精準(zhǔn)定位的授權(quán),可以調(diào)用位置服務(wù)獲取精準(zhǔn)定位。
對于不是強(qiáng)位置關(guān)聯(lián)應(yīng)用(例如導(dǎo)航、運(yùn)動(dòng)健康等)的應(yīng)用,只在部分前臺場景需要使用位置信息(例如定位城市、打卡、分享位置等)。如果需要長時(shí)間使用或是在后臺使用位置信息,建議申請位置權(quán)限。
位置控件效果如圖所示。
約束與限制
- 精準(zhǔn)定位的臨時(shí)授權(quán)會持續(xù)到滅屏、應(yīng)用切后臺、應(yīng)用退出等任一情況發(fā)生,然后恢復(fù)到臨時(shí)授權(quán)之前的授權(quán)狀態(tài)(授予/未授予/未申請)
- 應(yīng)用在授權(quán)期間沒有調(diào)用次數(shù)限制。
- 為了保障用戶的隱私不被惡意應(yīng)用獲取,應(yīng)用需確保安全控件是可見的且用戶能夠識別的。開發(fā)者需要合理的配置控件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發(fā)生因控件的樣式不合法導(dǎo)致授權(quán)失敗的情況,請檢查設(shè)備錯(cuò)誤日志。
- 開發(fā)前請熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
開發(fā)步驟
以在聊天界面發(fā)送實(shí)時(shí)定位信息為例。在當(dāng)前場景下,應(yīng)用僅需要在前臺期間,短暫地訪問當(dāng)前位置,不需要長時(shí)間使用。此時(shí),可以直接使用安全控件中的位置控件,免去權(quán)限申請和權(quán)限請求等環(huán)節(jié),獲得臨時(shí)授權(quán),滿足權(quán)限最小化,提升用戶的隱私體驗(yàn)。
參考以下步驟,實(shí)現(xiàn)效果:點(diǎn)擊控件“當(dāng)前位置”獲取臨時(shí)精準(zhǔn)定位授權(quán),獲取授權(quán)后,彈窗提示具體位置信息,效果圖請見上文。
- 引入位置服務(wù)依賴。
import { geoLocationManager } from '@kit.LocationKit';
- 添加位置控件和獲取當(dāng)前位置信息。
安全控件是由圖標(biāo)、文本、背景組成的類似Button的按鈕,其中圖標(biāo)、文本兩者至少有其一,背景是可選的。圖標(biāo)和文本不支持自定義,僅支持在已有的選項(xiàng)中選擇。應(yīng)用申明安全控件的接口時(shí),分為傳參和不傳參兩種,不傳參默認(rèn)創(chuàng)建圖標(biāo)+文字+背景的按鈕,傳參根據(jù)傳入的參數(shù)創(chuàng)建,不包含沒有配置的元素。
當(dāng)前示例使用默認(rèn)參數(shù),具體請參見[LocationButton控件]。此外,所有安全控件都繼承[安全控件通用屬性],可用于定制樣式。
在LocationButton的onClick()回調(diào)中通過調(diào)用[geoLocationManager]模塊提供的方法獲取當(dāng)前位置信息。HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿
import { geoLocationManager } from '@kit.LocationKit'; import { promptAction } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; // 獲取當(dāng)前位置信息 function getCurrentLocationInfo() { const requestInfo: geoLocationManager.LocationRequest = { 'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX, 'scenario': geoLocationManager.LocationRequestScenario.UNSET, 'timeInterval': 1, 'distanceInterval': 0, 'maxAccuracy': 0 }; geoLocationManager.getCurrentLocation(requestInfo) .then((location: geoLocationManager.Location) = > { promptAction.showToast({ message: JSON.stringify(location) }); }) .catch((err: BusinessError) = > { console.error(`Failed to get current location. Code is ${err.code}, message is ${err.message}`); }); } @Entry @Component struct Index { build() { Row() { Column({ space: 10 }) { LocationButton({ icon: LocationIconStyle.LINES, text: LocationDescription.CURRENT_LOCATION, buttonType: ButtonType.Normal }) .onClick((event: ClickEvent, result: LocationButtonOnClickResult) = > { if (result === LocationButtonOnClickResult.SUCCESS) { // 免去權(quán)限申請和權(quán)限請求等環(huán)節(jié),獲得臨時(shí)授權(quán),獲取位置信息授權(quán) getCurrentLocationInfo(); } else { promptAction.showToast({ message: '獲取位置信息失??!' }) } }) } .width('100%') } .height('100%') .backgroundColor(0xF1F3F5) } }
審核編輯 黃宇
-
鴻蒙
+關(guān)注
關(guān)注
57文章
2352瀏覽量
42863
發(fā)布評論請先 登錄
相關(guān)推薦
評論