使用位置控件
位置控件使用直觀且易懂的通用標識,讓用戶明確地知道這是一個獲取位置信息的按鈕。這滿足了授權場景需要匹配用戶真實意圖的需求。只有當用戶主觀愿意,并且明確了解使用場景后點擊位置控件,應用才會獲得臨時的授權,獲取位置信息并完成相應的服務功能。
一旦應用集成了位置控件,用戶點擊該控件后,無論應用是否已經申請過或被授予精準定位權限,都會在本次前臺期間獲得精準定位的授權,可以調用位置服務獲取精準定位。
對于不是強位置關聯應用(例如導航、運動健康等)的應用,只在部分前臺場景需要使用位置信息(例如定位城市、打卡、分享位置等)。如果需要長時間使用或是在后臺使用位置信息,建議申請位置權限。
位置控件效果如圖所示。
約束與限制
- 精準定位的臨時授權會持續到滅屏、應用切后臺、應用退出等任一情況發生,然后恢復到臨時授權之前的授權狀態(授予/未授予/未申請)
- 應用在授權期間沒有調用次數限制。
- 為了保障用戶的隱私不被惡意應用獲取,應用需確保安全控件是可見的且用戶能夠識別的。開發者需要合理的配置控件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發生因控件的樣式不合法導致授權失敗的情況,請檢查設備錯誤日志。
- 開發前請熟悉鴻蒙開發指導文檔 :[
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
]
開發步驟
以在聊天界面發送實時定位信息為例。在當前場景下,應用僅需要在前臺期間,短暫地訪問當前位置,不需要長時間使用。此時,可以直接使用安全控件中的位置控件,免去權限申請和權限請求等環節,獲得臨時授權,滿足權限最小化,提升用戶的隱私體驗。
參考以下步驟,實現效果:點擊控件“當前位置”獲取臨時精準定位授權,獲取授權后,彈窗提示具體位置信息,效果圖請見上文。
- 引入位置服務依賴。
import { geoLocationManager } from '@kit.LocationKit';
- 添加位置控件和獲取當前位置信息。
安全控件是由圖標、文本、背景組成的類似Button的按鈕,其中圖標、文本兩者至少有其一,背景是可選的。圖標和文本不支持自定義,僅支持在已有的選項中選擇。應用申明安全控件的接口時,分為傳參和不傳參兩種,不傳參默認創建圖標+文字+背景的按鈕,傳參根據傳入的參數創建,不包含沒有配置的元素。
當前示例使用默認參數,具體請參見[LocationButton控件]。此外,所有安全控件都繼承[安全控件通用屬性],可用于定制樣式。
在LocationButton的onClick()回調中通過調用[geoLocationManager]模塊提供的方法獲取當前位置信息。HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿
import { geoLocationManager } from '@kit.LocationKit'; import { promptAction } from '@kit.ArkUI'; import { BusinessError } from '@kit.BasicServicesKit'; // 獲取當前位置信息 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) { // 免去權限申請和權限請求等環節,獲得臨時授權,獲取位置信息授權 getCurrentLocationInfo(); } else { promptAction.showToast({ message: '獲取位置信息失敗!' }) } }) } .width('100%') } .height('100%') .backgroundColor(0xF1F3F5) } }
審核編輯 黃宇
-
鴻蒙
+關注
關注
57文章
2390瀏覽量
42968
發布評論請先 登錄
相關推薦
評論