色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發Ability Kit程序框架服務:向用戶申請授權

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-01 09:18 ? 次閱讀

向用戶申請授權

當應用需要訪問用戶的隱私信息或使用系統能力時,例如獲取位置信息、訪問日歷、使用相機拍攝照片或錄制視頻等,應該向用戶請求授權,這部分權限是user_grant權限。

當應用申請user_grant權限時,需要完成以下步驟:

  1. 在配置文件中,聲明應用需要請求的權限。
  2. 將應用中需要申請權限的目標對象與對應目標權限進行關聯,讓用戶明確地知道,哪些操作需要用戶向應用授予指定的權限。
  3. 運行應用時,在用戶觸發訪問操作目標對象時應該調用接口,精準觸發動態授權彈框。該接口的內部會檢查當前用戶是否已經授權應用所需的權限,如果當前用戶尚未授予應用所需的權限,該接口會拉起動態授權彈框,向用戶請求授權。
  4. 檢查用戶的授權結果,確認用戶已授權才可以進行下一步操作。
  5. 開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

本章節會介紹如何完成步驟3和4。

約束與限制

  • 每次執行需要目標權限的操作時,應用都必須檢查自己是否已經具有該權限。
    如需檢查用戶是否已向您的應用授予特定權限,可以使用[checkAccessToken()]函數,此方法會返回[PERMISSION_GRANTED]或[PERMISSION_DENIED]。具體示例可參考下文。
  • 每次訪問受目標權限保護的接口之前,都需要使用[requestPermissionsFromUser()]接口請求相應的權限。
    用戶可能在動態授予權限后通過系統設置來取消應用的權限,因此不能將之前授予的授權狀態持久化。
  • user_grant權限授權要基于用戶可知可控的原則,需要應用在運行時主動調用系統動態申請權限的接口,系統彈框由用戶授權,用戶結合應用運行場景的上下文,識別出應用申請相應敏感權限的合理性,從而做出正確的選擇。
  • 系統不鼓勵頻繁彈窗打擾用戶,如果用戶拒絕授權,將無法再次拉起彈窗,需要應用引導用戶在系統應用“設置”的界面中手動授予權限。

開發步驟

以申請使用麥克風權限為例進行說明。

效果展示:

zh-cn_image_0000001701708034

  1. 申請ohos.permission.MICROPHONE權限。
  2. 校驗當前是否已經授權。
    在進行權限申請之前,需要先檢查當前應用程序是否已經被授予權限。可以通過調用[checkAccessToken()]方法來校驗當前是否已經授權。如果已經授權,則可以直接訪問目標操作,否則需要進行下一步操作,即向用戶申請授權。
    import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
    
    async function checkPermissionGrant(permission: Permissions): Promise< abilityAccessCtrl.GrantStatus > {
      let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
      let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
    
      // 獲取應用程序的accessTokenID
      let tokenId: number = 0;
      try {
        let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
        let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
        tokenId = appInfo.accessTokenId;
      } catch (error) {
        const err: BusinessError = error as BusinessError;
        console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
      }
    
      // 校驗應用是否被授予權限
      try {
        grantStatus = await atManager.checkAccessToken(tokenId, permission);
      } catch (error) {
        const err: BusinessError = error as BusinessError;
        console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
      }
    
      return grantStatus;
    }
    
    async function checkPermissions(): Promise< void > {
      let grantStatus: abilityAccessCtrl.GrantStatus = await checkPermissionGrant(permissions[0]);
    
      if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
        // 已經授權,可以繼續訪問目標操作
      } else {
        // 申請麥克風權限
      }
    }
    
  3. 動態向用戶申請授權。
    動態向用戶申請權限是指在應用程序運行時向用戶請求授權的過程。可以通過調用[requestPermissionsFromUser()]方法來實現。該方法接收一個權限列表參數,例如位置、日歷、相機、麥克風等。用戶可以選擇授予權限或者拒絕授權。
    可以在UIAbility的onWindowStageCreate()回調中調用[requestPermissionsFromUser()]方法來動態申請權限,也可以根據業務需要在UI中向用戶申請授權。
    • 在UIAbility中向用戶申請授權。

      import { abilityAccessCtrl, common, Permissions, UIAbility } from '@kit.AbilityKit';
      import { window } from '@kit.ArkUI';
      import { BusinessError } from '@kit.BasicServicesKit';
      
      const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
      function reqPermissionsFromUser(permissions: Array< Permissions >, context: common.UIAbilityContext): void {
        let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
        // requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗
        atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
          let grantStatus: Array< number > = data.authResults;
          let length: number = grantStatus.length;
          for (let i = 0; i < length; i++) {
            if (grantStatus[i] === 0) {
              // 用戶授權,可以繼續訪問目標操作
            } else {
              // 用戶拒絕授權,提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統設置中打開相應的權限
              return;
            }
          }
          // 授權成功
        }).catch((err: BusinessError) = > {
          console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
        })
      }
      export default class EntryAbility extends UIAbility {
        onWindowStageCreate(windowStage: window.WindowStage): void {
          // ...
          windowStage.loadContent('pages/Index', (err, data) = > {
            reqPermissionsFromUser(permissions, this.context);
          // ...
          });
        }
      
        // ...
      }
      
    • 在UI中向用戶申請授權。

      import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
      import { BusinessError } from '@kit.BasicServicesKit';
      
      const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
      function reqPermissionsFromUser(permissions: Array< Permissions >, context: common.UIAbilityContext): void {
        let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
        // requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗
        atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
          let grantStatus: Array< number > = data.authResults;
          let length: number = grantStatus.length;
          for (let i = 0; i < length; i++) {
            if (grantStatus[i] === 0) {
              // 用戶授權,可以繼續訪問目標操作
            } else {
              // 用戶拒絕授權,提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統設置中打開相應的權限
              return;
            }
          }
          // 授權成功
        }).catch((err: BusinessError) = > {
          console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
        })
      }
      
      @Entry
      @Component
      struct Index {
        aboutToAppear() {
          const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
          reqPermissionsFromUser(permissions, context);
        }
      
        build() {
          // ...
        }
      }
      

      HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

      QQ瀏覽器截圖20240320150855.png

  4. 處理授權結果。
    調用[requestPermissionsFromUser()]方法后,應用程序將等待用戶授權的結果。如果用戶授權,則可以繼續訪問目標操作。如果用戶拒絕授權,則需要提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統應用“設置”中打開相應的權限。
    路徑:設置 > 隱私 > 權限管理 > 應用 > 目標應用

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17475
  • 鴻蒙
    +關注

    關注

    57

    文章

    2339

    瀏覽量

    42805
收藏 人收藏

    評論

    相關推薦

    鴻蒙開發接口Ability框架:【@ohos.ability.featureAbility (FeatureAbility模塊)】

    FeatureAbility模塊提供帶有UI設計與用戶交互的能力,包括啟動新的ability、獲取dataAbilityHelper、設置此Page Ability、獲取當前Ability
    的頭像 發表于 05-06 16:31 ?998次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b>接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.<b class='flag-5'>ability</b>.featureAbility (FeatureAbility模塊)】

    鴻蒙Ability Kit程序框架服務)【ServiceExtensionAbility】

    [ServiceExtensionAbility]是SERVICE類型的ExtensionAbility組件,提供后臺服務能力,其內部持有了一個[ServiceExtensionContext],通過[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發表于 06-04 14:50 ?1198次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【ServiceExtensionAbility】

    鴻蒙Ability開發-Stage模型下Ability的創建和使用

    ) ?? \'\'); }); } ... }; UIAbilityContext模塊啟動Ability的能力 UIAbilityContext模塊提供允許訪問特定Ability的資源的能力,包括對Ability的啟動、停止
    發表于 01-08 15:34

    鴻蒙原生應用元服務-訪問控制(權限)開發Stage模型向用戶申請授權

    之前,需要先檢查當前應用程序是否已經被授予了權限。可以通過調用checkAccessToken()方法來校驗當前是否已經授權。如果已經授權,則可以直接訪問目標操作,否則需要進行下一步操作,即
    發表于 04-15 16:44

    鴻蒙原生應用元服務-訪問控制(權限)開發等級和類型

    ,列表中給出了詳細的權限使用理由。 應用需要在應用商店的詳情頁面,向用戶展示所申請的user_grant權限列表。 不同權限類型的授權流程 如權限的工作流程所示,如果應用需要獲取目標權限,那么需要先進
    發表于 04-17 15:29

    鴻蒙原生應用元服務開發-位置服務申請權限

    申請位置權限開發指導 場景概述 應用在使用位置服務系統能力前,需要檢查是否已經獲取用戶授權訪問設備位置信息。如未獲得
    發表于 06-18 15:27

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦接入方案

    一、方案概述 當開發者有事件想要通知到用戶時,可通過應用/元服務的云側服務器向智慧分發平臺推送事件內容(意圖共享)。系統通過智慧決策判斷事件發生的條件,在滿足條件時,
    發表于 11-14 15:26

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫
    發表于 11-28 10:43

    鴻蒙應用模型:【Ability Kit】簡介

    Ability Kit程序框架服務)提供了應用程序開發
    的頭像 發表于 05-29 14:41 ?635次閱讀
    <b class='flag-5'>鴻蒙</b>應用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡介

    鴻蒙Ability Kit程序框架服務)【Ability內頁面間的跳轉】

    基于Stage模型下的Ability開發,實現Ability內頁面間的跳轉和數據傳遞。
    的頭像 發表于 06-03 20:43 ?296次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>內頁面間的跳轉】

    鴻蒙Ability Kit程序框架服務)【Ability與ServiceExtensionAbility通信】

    本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發表于 06-05 09:28 ?480次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>與ServiceExtensionAbility通信】

    鴻蒙Ability Kit程序框架服務)【應用啟動框架AppStartup】

    `AppStartup`提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應用的啟動時間。使用啟動框架應用開發者只需要分別為待初始化的組件實現`AppStartup`提供
    的頭像 發表于 06-10 18:38 ?700次閱讀

    鴻蒙開發Ability Kit程序框架服務:聲明權限

    應用在申請權限時,需要在項目的配置文件中,逐個聲明需要的權限,否則應用將無法獲取授權
    的頭像 發表于 07-01 09:22 ?334次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>:聲明權限

    鴻蒙開發Ability Kit程序框架服務向用戶申請單次授權

    基于授權最小化的原則,防止應用獲取和濫用用戶數據,針對部分應用敏感權限,在彈窗向用戶申請授權時,新增“允許本次使用”的
    的頭像 發表于 07-01 14:34 ?398次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>:<b class='flag-5'>向用戶</b><b class='flag-5'>申請</b>單次<b class='flag-5'>授權</b>

    鴻蒙開發Ability Kit程序訪問控制:向用戶申請單次授權

    受限開放的權限通常是不允許三方應用申請的。當應用在申請權限來訪問必要的資源時,發現部分權限的等級比應用APL等級高,開發者可以選擇通過ACL方式來解決等級不匹配的問題,從而使用受限權限。
    的頭像 發表于 07-02 17:48 ?495次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b>訪問控制:<b class='flag-5'>向用戶</b><b class='flag-5'>申請</b>單次<b class='flag-5'>授權</b>
    主站蜘蛛池模板: 久久精品国产色蜜蜜麻豆国语版| 久久99re2在线视频精品| 簧片高清在线观看| 蜜柚影院在线观看免费高清中文| 欧美性暴力变态xxxx| 午夜理论片YY4399影院| 伊人免费在线| 丰满艳妇亲伦| 久久国产精品福利影集| 肉多的小说腐小说| 亚洲免费福利在线视频| 久久综合久综合久久鬼色| 色戒在线完整观看在线播放版| 亚洲毛片网| 不分昼夜H1V3| 久久影院一区| 午夜向日葵视频在线观看| 97视频免费在线| 国内极度色诱视频网站| 青青热久久综合网伊人 | 男女啪啪久久精品亚洲A| 网红主播 国产精品 开放90后| 最近最新的日本字幕MV| 国产色婷婷精品人妻蜜桃成熟| 墨西哥美女主播| 亚洲午夜精品A片久久WWW解说| 高清国产激情视频在线观看| 龙广在线收听| 先锋影音av最新资源| 把腿张开老子CAO烂你动态图| 久久精品中文字幕| 无码天堂亚洲国产AV久久| 99久久国产露脸精品国产吴梦梦 | 女性酥酥影院| 亚洲熟妇色自偷自拍另类| 国产成人刺激视频在线观看| 男人J放进女人P全黄网站| 一个人的免费高清影院| 国产精品视频免费观看| 任你躁国语自产二区在线播放 | 久久国产精品无码视欧美|