From 9b82c7ceb3f6e05e9437d51d01f11c6c5dcba9b1 Mon Sep 17 00:00:00 2001
From: zourenjie
Date: Fri, 23 Feb 2024 11:11:08 +0800
Subject: [PATCH] =?UTF-8?q?[Issues:=20#I92TUK]=20=E6=B7=BB=E5=8A=A0permiss?=
=?UTF-8?q?ions=E6=8C=87=E5=AF=BC=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
1224/react-native-permissions.md | 319 +++++++++++++++++++++++++++++++
1 file changed, 319 insertions(+)
create mode 100644 1224/react-native-permissions.md
diff --git a/1224/react-native-permissions.md b/1224/react-native-permissions.md
new file mode 100644
index 00000000..33a0aae2
--- /dev/null
+++ b/1224/react-native-permissions.md
@@ -0,0 +1,319 @@
+> 模板版本:v0.1.3
+
+
+
react-native-permissions
+
+
+
+
+
+
+
+
+
+
+
+> [!tip] [Github 地址](https://github.com/react-native-oh-library/react-native-permissions)
+
+## 安装与使用
+
+请到三方库的 Releases 发布地址查看配套的版本信息:[@react-native-oh-tpl/react-native-permissions Releases](https://github.com/react-native-oh-library/react-native-permissions/releases),并下载适用版本的 tgz 包。
+
+进入到工程目录并输入以下命令:
+
+
+
+#### **npm**
+
+```bash
+npm install @react-native-oh-tpl/react-native-permissions@file:#
+```
+
+#### **yarn**
+
+```bash
+yarn add @react-native-oh-tpl/react-native-permissions@file:#
+```
+
+
+
+下面的代码展示了这个库的基本使用场景:
+
+>[!WARNING] 使用时 import 的库名不变。
+
+```js
+import { ScrollView, StyleSheet, View, Text, Button } from 'react-native';
+import React from 'react';
+import RTNPermissions, { Permission } from 'react-native-permissions';
+
+const permissionNormal: Permission[] = [
+ 'ohos.permission.APPROXIMATELY_LOCATION',
+ 'ohos.permission.CAMERA',
+ 'ohos.permission.MICROPHONE',
+ 'ohos.permission.READ_CALENDAR',
+ 'ohos.permission.WRITE_CALENDAR',
+ 'ohos.permission.ACTIVITY_MOTION',
+ 'ohos.permission.READ_HEALTH_DATA',
+ 'ohos.permission.DISTRIBUTED_DATASYNC',
+ 'ohos.permission.READ_MEDIA',
+ 'ohos.permission.MEDIA_LOCATION',
+ 'ohos.permission.ACCESS_BLUETOOTH',
+]
+
+export function PermissionsExample() {
+ return (
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ sectionContainer: {
+ marginTop: 32,
+ paddingHorizontal: 24,
+ },
+ view: {
+ width: '100%',
+ display: 'flex',
+ flexDirection: 'row',
+ justifyContent: 'space-evenly',
+ flexWrap: 'wrap',
+ margin: 5,
+ }
+});
+```
+
+## Link
+
+目前鸿蒙暂不支持 AutoLink,所以 Link 步骤需要手动配置。
+
+首先需要使用 DevEco Studio 打开项目里的鸿蒙工程 `harmony`
+
+### 引入原生端代码
+
+目前有两种方法:
+
+1. 通过 har 包引入(在 IDE 完善相关功能后该方法会被遗弃,目前首选此方法);
+2. 直接链接源码。
+
+方法一:通过 har 包引入
+
+> [!TIP] har 包位于三方库安装路径的 `harmony` 文件夹下。
+
+打开 `entry/oh-package.json5`,添加以下依赖
+
+```json
+"dependencies": {
+ "rnoh": "file:../rnoh",
+ "react-native-permissions": "file:../../node_modules/react-native-permissions/harmony/permissions.har"
+ }
+```
+
+点击右上角的 `sync` 按钮
+
+或者在终端执行:
+
+```bash
+cd entry
+ohpm install
+```
+
+方法二:直接链接源码
+
+> [!TIP] 源码位于三方库安装路径的 `harmony` 文件夹下。
+
+打开 `entry/oh-package.json5`,添加以下依赖
+
+```json
+"dependencies": {
+ "rnoh": "file:../rnoh",
+ "react-native-permissions": "file:../../node_modules/react-native-permissions/harmony/permissions"
+ }
+```
+
+打开终端,执行:
+
+```bash
+cd entry
+ohpm install --no-link
+```
+
+### 配置 CMakeLists 和引入 PermissionsPackage
+
+打开 `entry/src/main/cpp/CMakeLists.txt`,添加:
+
+```diff
+project(rnapp)
+cmake_minimum_required(VERSION 3.4.1)
+set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
+set(RNOH_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../react-native-harmony/harmony/cpp")
+
+add_subdirectory("${RNOH_CPP_DIR}" ./rn)
+
+# RNOH_BEGIN: add_package_subdirectories
+add_subdirectory("../../../../sample_package/src/main/cpp" ./sample-package)
++ add_subdirectory("${OH_MODULE_DIR}/react-native-permissions/src/main/cpp" ./permissions)
+# RNOH_END: add_package_subdirectories
+
+add_library(rnoh_app SHARED
+ "./PackageProvider.cpp"
+ "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
+)
+
+target_link_libraries(rnoh_app PUBLIC rnoh)
+
+# RNOH_BEGIN: link_packages
+target_link_libraries(rnoh_app PUBLIC rnoh_sample_package)
++ target_link_libraries(rnoh_app PUBLIC rnoh_permissions)
+# RNOH_END: link_packages
+```
+
+打开 `entry/src/main/cpp/PackageProvider.cpp`,添加:
+
+```diff
+#include "RNOH/PackageProvider.h"
+#include "SamplePackage.h"
++ #include "PermissionsPackage.h"
+
+using namespace rnoh;
+
+std::vector> PackageProvider::getPackages(Package::Context ctx) {
+ return {
+ std::make_shared(ctx),
++ std::make_shared(ctx)
+ };
+}
+```
+
+### 在 ArkTs 侧引入 PermissionsPackage
+
+打开 `entry/src/main/ets/RNPackagesFactory.ts`,添加:
+
+```diff
+...
++ import {PermissionsPackage} from 'react-native-permissions/ts';
+
+export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
+ return [
+ new SamplePackage(ctx),
++ new PermissionsPackage(ctx),
+ ];
+}
+```
+
+### 运行
+
+点击右上角的 `sync` 按钮
+
+或者在终端执行:
+
+```bash
+cd entry
+ohpm install
+```
+
+然后编译、运行即可。
+
+## 约束与限制
+
+### 兼容性
+
+要使用此库,需要使用正确的 React-Native 和 RNOH 版本。另外,还需要使用配套的 DevEco Studio 和 手机 ROM。
+
+请到三方库相应的 Releases 发布地址查看 Release 配套的版本信息:[@react-native-oh-tpl/react-native-permissions Releases](https://github.com/react-native-oh-library/react-native-permissions/releases)
+
+### 权限要求
+
+需要在`entry/src/main/oh-package.json5`中声明权限。
+
+```
+"requestPermissions": [
+ {
+ "name" : "ohos.permission.PERMISSION1",
+ "reason": "$string:reason",
+ "usedScene": {
+ "abilities": [
+ "FormAbility"
+ ],
+ "when":"inuse"
+ }
+ },
+ {
+ "name" : "ohos.permission.PERMISSION2",
+ "reason": "$string:reason",
+ "usedScene": {
+ "abilities": [
+ "FormAbility"
+ ],
+ "when":"always"
+ }
+ }
+]
+```
+
+权限列表
+
+```
+'ohos.permission.APPROXIMATELY_LOCATION',
+'ohos.permission.CAMERA',
+'ohos.permission.MICROPHONE',
+'ohos.permission.READ_CALENDAR',
+'ohos.permission.WRITE_CALENDAR',
+'ohos.permission.ACTIVITY_MOTION',
+'ohos.permission.READ_HEALTH_DATA',
+'ohos.permission.DISTRIBUTED_DATASYNC',
+'ohos.permission.READ_MEDIA',
+'ohos.permission.MEDIA_LOCATION',
+'ohos.permission.ACCESS_BLUETOOTH'
+```
+
+
+
+## 方法
+
+| Name | Description | Platform | HarmonyOS Support |
+| -------------------------- | ----------- | ----------- | ----------------- |
+| check | | ios,android | yes |
+| checkNotifications | | ios,android | no |
+| getConstants | | ios,android | no |
+| openSettings | | ios,android | no |
+| request | | ios,android | yes |
+| requestNotifications | | ios,android | yes |
+| checkMultiple | | android | yes |
+| requestMultiple | | android | yes |
+| shouldShowRequestRationale | | android | no |
+| checkLocationAccuracy | | ios | no |
+| openPhotoPicker | | ios | no |
+| requestLocationAccuracy | | ios | no |
+
+## 遗留问题
+
+## 其他
+
+## 开源协议
+
+本项目基于 [The MIT License (MIT)](https://github.com/react-native-oh-library/react-native-permissions/blob/master/LICENSE) ,请自由地享受和参与开源。
+
--
Gitee