用户可通过该项目在鸿蒙应用中便捷管理悬浮窗权限。它是@vokhuyet/react-native-draw-overlay的鸿蒙适配版,支持权限检查与弹窗申请,交互简洁,适配API12+,支持Autolink。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |
@bingtang-rn/react-native-draw-overlay for HarmonyOS
本项目基于 @vokhuyet/react-native-draw-overlay 开发,为 React Native 鸿蒙(OpenHarmony)适配版本。如果在使用过程中有任何问题,可以在GitCode提Issue,会及时跟进。issue地址:issues。
版本对应关系
| 鸿蒙适配包版本 | 原始库版本 | 支持 RN 版本 | Autolink | 编译 API 版本 |
|---|---|---|---|---|
| 见发布记录 | 1.0.1 | 0.72+ | 是 | API17+ |
安装
npm install @bingtang-rn/react-native-draw-overlay
使用
import { requestOverlayPermission, isOverlayPermissionGranted } from '@vokhuyet/react-native-draw-overlay';
// 检查悬浮窗权限是否已授予
const granted = await isOverlayPermissionGranted();
console.log('Overlay permission granted:', granted);
// 请求悬浮窗权限
const result = await requestOverlayPermission();
console.log('Permission request result:', result);
import 时使用原库名
'@vokhuyet/react-native-draw-overlay',而非鸿蒙包名。
平台差异:
- Android 通过跳转系统设置页让用户手动开启悬浮窗权限;HarmonyOS 通过
requestPermissionsFromUser弹窗申请,交互更简洁。
权限要求:
- 需在
module.json5的requestPermissions中声明ohos.permission.SYSTEM_FLOAT_WINDOW(user_grant 权限,运行时自动申请)。
Link
| 版本 | 是否支持 Autolink |
|---|---|
| 当前版本 | 是 |
如使用版本支持 Autolink 且工程已接入,可跳过手动配置。
Manual Link 配置
说明:本模块需要同时在 C++ 侧和 ETS 侧注册 Package。
1. Overrides RN SDK
在工程根目录 oh-package.json5 添加:
{
"overrides": {
"@rnoh/react-native-openharmony": "./react_native_openharmony"
}
}
2. 引入原生端依赖
打开 entry/oh-package.json5,添加:
"dependencies": {
"@bingtang-rn/react-native-draw-overlay": "file:../../node_modules/@bingtang-rn/react-native-draw-overlay/harmony/draw_overlay.har"
}
执行 ohpm install。
3. 配置 CMakeLists
打开 entry/src/main/cpp/CMakeLists.txt,添加:
set(OH_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
add_subdirectory("${OH_MODULES}/@bingtang-rn/react-native-draw-overlay/src/main/cpp" ./draw_overlay)
target_link_libraries(rnoh_app PUBLIC draw_overlay)
4. 注册 Package(C++ 侧)
打开 entry/src/main/cpp/PackageProvider.cpp,添加:
#include "DrawOverlayPackage.h"
std::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {
return {
std::make_shared<DrawOverlayPackage>(ctx),
};
}
5. 注册 Package(ETS 侧)
打开 entry/src/main/ets/RNPackagesFactory.ets,添加:
import { DrawOverlayPackage } from '@bingtang-rn/react-native-draw-overlay/ts';
export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
return [
new DrawOverlayPackage(ctx),
];
}
属性 / API
| API | 描述 | 参数 | 返回值 | HarmonyOS 支持 |
|---|---|---|---|---|
| requestOverlayPermission | 请求悬浮窗权限 | 无 | Promise<boolean> | ✅ 完全支持 |
| isOverlayPermissionGranted | 检查悬浮窗权限是否已授予 | 无 | Promise<boolean> | ✅ 完全支持 |
平台差异
requestOverlayPermission:Android 跳转系统设置页Settings.ACTION_MANAGE_OVERLAY_PERMISSION,HarmonyOS 通过abilityAccessCtrl.requestPermissionsFromUser弹窗申请。两者语义一致(请求权限→返回授权结果),但交互方式不同。isOverlayPermissionGranted:Android 使用Settings.canDrawOverlays()+AppOpsManager.checkOp()多层降级检测;HarmonyOS 使用abilityAccessCtrl.checkAccessToken()直接查询权限状态,无需降级方案。
快速验证(运行 Example)
前置条件
| 依赖 | 版本要求 |
|---|---|
| Node.js | >= 18 |
| DevEco Studio | 5.0+ / 6.0+ |
| HarmonyOS SDK | API 17+ |
运行步骤
1. 克隆仓库
git clone <仓库地址>
cd <仓库目录>
2. 安装依赖并构建
npm install --legacy-peer-deps
npm pack # 生成 tgz 包(会自动触发 prepare 构建 JS 产物)
3. 进入 example 目录,安装依赖
cd example
npm install --legacy-peer-deps
4. 生成 JS Bundle
npm run dev
产物:harmony/entry/src/main/resources/rawfile/bundle.harmony.js
5. 用 DevEco Studio 打开鸿蒙工程
- 打开 DevEco Studio
- 选择
example/harmony目录 - 等待 Sync 完成
6. 编译并运行 HAP
在 DevEco Studio 中点击运行按钮,将 HAP 安装到设备/模拟器。
注意:Example 中已预置插件依赖和 Package 注册,无需手动配置 Link。
约束与限制
兼容性
- RNOH: 0.72+
- HarmonyOS SDK: API 17+
- DevEco Studio: 5.0+
遗留问题
无
开源协议
本项目基于 MIT License,详见 LICENSE 文件。