npm 包 expo-permissions 使用教程

阅读时长 5 分钟读完

前言

在移动应用中,使用设备的各种硬件和资源需要获取用户的授权,因此权限管理是开发中的重要环节。expo-permissions 是一个方便的库,能够让开发者快捷且安全的请求设备的各种权限,如相机、通知等。

安装

可以通过 npm 或者 yarn 安装 expo-permissions:

安装完成之后,可以在项目中以如下方式引入:

使用

expo-permissions 里面包括多种权限,如 Camera、Location、Contacts、MediaLibrary等。

获取权限状态

使用 Permissions.getAsync() 函数来查询权限是否授权:

该函数返回一个 Promise ,可以通过 async/await 异步获取,status为一个字符串,可能的取值是 "undetermined"、"granted"、"denied"、"blocked"。

请求权限

使用 Permissions.askAsync() 函数来请求权限:

该函数返回一个 Promise ,可以通过 async/await 异步获取,status为一个字符串,可能的取值是 "granted"、"denied";

监听权限变化

使用 Permissions.addListener() 函数来监听权限变化:

该函数返回的是一个 Subscription 对象,记得及时删除。

示例代码

下面是一个基于 React Native 环境下的例子,当用户授权了相册权限,可以选择图片上传:

-- -------------------- ---- -------
------ ------ - -------- - ---- --------
------ - ----- ----- ----------------- ------ -------- - ---- ---------------

------ - -- ----------- ---- -------------------
------ ----------- ---- --------------------

----- ---------------------- - -
  ---- --------------------------
  -------- ------------------------
--

------ ------- -------- ------------- -
  ----- ------- --------- - ---------------

  ----- ----------- - ----- -- -- -
    ----- - ------ - - ----- ----------------------------------------------------------
    -- ------- --- ---------- -
      ------------------
      -------
    -

    ----- ------ - ----- ------------------------------------- -------------- ----- ------- --- -- ---
    -- ------------------- -
      ---------------------
    -
  --

  ------ -
    ----- -------- ----- -- ----------- --------- --------------- -------- ---
      ------ -- ------ --------- ---- ----- -- -------- ------ ---- ------- --- -- ---
      ----------------- ----------------------
        -----------------
      -------------------
    -------
  --
-
展开代码

该示例代码使用了 expo-image-picker 库来选择图片,使用了 Platform API 来区分 iOS 和 Android 安装的权限名称。同时新增了反馈用户未授权的处理逻辑。

总结

在 React Native 应用开发中,使用expo-permissions 可以快速、安全地请求各种权限,可以极大的简化应用的开发过程。在使用过程中,需先判断当前权限状态,然后再决定是否向用户申请授权。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedabd0b5cbfe1ea0610882

纠错
反馈

纠错反馈