使用位置控件
位置控件使用直觀且易懂的通用標識,讓用戶明確地知道這是一個獲取位置信息的按鈕。這滿足了授權場景需要匹配用戶真實意圖的需求。只有當用戶主觀愿意,并且明確了解使用場景后點擊位置控件,應用才會獲得臨時的授權,獲取位置信息并完成相應的服務功能。
一旦應用集成了位置控件,用戶點擊該控件后,無論應用是否已經申請過或被授予精準定位權限,都會在本次前臺期間獲得精準定位的授權,可以調用位置服務獲取精準定位。
對于不是強位置關聯應用(例如導航、運動健康等)的應用,只在部分前臺場景需要使用位置信息(例如定位城市、打卡、分享位置等)。如果需要長時間使用或是在后臺使用位置信息,建議申請位置權限。
位置控件效果如圖所示。

約束與限制
- 精準定位的臨時授權會持續到滅屏、應用切后臺、應用退出等任一情況發生,然后恢復到臨時授權之前的授權狀態(授予/未授予/未申請)
- 應用在授權期間沒有調用次數限制。
- 為了保障用戶的隱私不被惡意應用獲取,應用需確保安全控件是可見的且用戶能夠識別的。開發者需要合理的配置控件的尺寸、顏色等屬性,避免視覺混淆的情況,如果發生因控件的樣式不合法導致授權失敗的情況,請檢查設備錯誤日志。
- 開發前請熟悉鴻蒙開發指導文檔 :[
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) } }
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
鴻蒙
+關注
關注
60文章
2963瀏覽量
45882
發布評論請先 登錄
相關推薦
熱點推薦
鴻蒙開發接口Ability框架:【@ohos.application.Ability (Ability)】
Ability模塊提供對Ability生命周期、上下文環境等調用管理的能力,包括Ability創建、銷毀、轉儲客戶端信息等。
鴻蒙Ability開發-Stage模型下Ability的創建和使用
);
hilog.info(ENTRY_ABILITY_DOMAIN, TAG, \'%{public}s\', \'Ability onBackground\');
}
}
本文內容是鴻蒙
發表于 01-08 15:34
跟阿斌一起學鴻蒙(2): Ability vs App?
在進一步實踐之前,需要先弄明白一個概念:Ability。不知道你有沒有注意到,使用鴻蒙開發工具DevEco Studio創建項目時,我們選擇創建的是一個個Ability。這是為什么呢?
發表于 11-30 20:56
鴻蒙Ability Kit(程序框架服務)【Ability與ServiceExtensionAbility通信】
本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
鴻蒙開發Ability Kit程序框架服務:訪問控制概述 程序訪問控制
默認情況下,應用只能訪問有限的系統資源。但某些情況下,應用存在擴展功能的訴求,需要訪問額外的系統數據(包括用戶個人數據)和功能,系統也必須以明確的方式對外提供接口來共享其數據或功能。
鴻蒙開發Ability Kit程序框架服務:應用權限管控概述 程序訪問控制
系統提供了一種允許應用訪問系統資源(如:通訊錄等)和系統能力(如:訪問攝像頭、麥克風等)的通用權限訪問方式,來保護系統數據(包括用戶個人數據)或功能,避免它們被不當或惡意使用。
鴻蒙開發Ability Kit程序訪問控制:向用戶申請單次授權
受限開放的權限通常是不允許三方應用申請的。當應用在申請權限來訪問必要的資源時,發現部分權限的等級比應用APL等級高,開發者可以選擇通過ACL方式來解決等級不匹配的問題,從而使用受限權限。
鴻蒙開發Ability Kit程序訪問控制:申請使用受限權限
受限開放的權限通常是不允許三方應用申請的。當應用在申請權限來訪問必要的資源時,發現部分權限的等級比應用APL等級高,開發者可以選擇通過ACL方式來解決等級不匹配的問題,從而使用受限權限。
鴻蒙開發Ability Kit程序訪問控制:對所有應用開放
在申請目標權限前,建議開發者先閱讀[申請應用權限],對權限的工作流程有基本了解后,再結合以下權限字段的具體說明,判斷應用能否申請目標權限,提高開發效率。
鴻蒙開發Ability Kit程序訪問控制:安全控件概述
安全控件是系統提供的一組系統實現的ArkUI組件,應用集成這類組件就可以實現在用戶點擊后自動授權,而無需彈窗授權。它們可以作為一種“特殊的按鈕”融入應用頁面,實現用戶點擊即許可的設計思路。
鴻蒙開發Ability Kit程序訪問控制:使用位置控件
評論