rntpc_react-native-device-info:基于 react-native-device-info 的 OpenHarmony 适配版,获取设备信息(型号、系统版本、ID 等)

基于 react-native-device-info 的 OpenHarmony 适配版,获取设备信息(型号、系统版本、ID 等)

分支5Tags6

文档模板:v0.4.2

react-native-device-info

本项目基于 react-native-device-info 开发。

该第三方库的仓库已迁移至 Gitcode,且支持直接从 npm 下载,新的包名为:@react-native-ohos/react-native-device-info 版本所属关系如下:

三方库名称 三方库版本(npm地址) 发布信息 支持RN版本 Autolink 编译API版本 社区基线版本 源码地址
@react-native-ohos/react-native-device-info ~ 14.2.0(开发中) Gitcode Releases 0.82.* / 0.84.* 是 API12+ 15.0.2 master
@react-native-ohos/react-native-device-info 14.1.2 Gitcode Releases 0.82.* 是 API12+ 14.1.1 br_rnoh0.82
@react-native-ohos/react-native-device-info ~ 14.0.5 Gitcode Releases 0.77.* 否 API12+ 14.0.4 br_rnoh0.77
@react-native-ohos/react-native-device-info ~ 11.1.1 Gitcode Releases 0.72.* 是 API12+ 11.1.0 br_rnoh0.72
@react-native-oh-tpl/react-native-device-info <= 11.1.0-0.0.8@deprecated Github Releases(deprecated) 0.72.* 否 API12+ 11.1.0 sig

简介

react-native-device-info 是一个用于 React Native 应用的专业设备信息库,支持获取详细的设备、系统和应用信息。

下载安装

进入到工程目录并输入以下命令:

npm

npm install @react-native-ohos/react-native-device-info

yarn

yarn add @react-native-ohos/react-native-device-info
是否支持autolink RN框架版本
~14.2.0 Yes 0.82/0.84
14.1.2 Yes 0.82

使用AutoLink的工程需要根据该文档配置,Autolink框架指导文档:https://gitcode.com/CPF-RN/ohos_react_native/blob/master/docs/zh-cn/Autolinking.md

如您使用的版本支持 Autolink,并且工程已接入 Autolink,可跳过ManualLink配置。

ManualLink: 此步骤为手动配置原生依赖项的指导

首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 harmony。

1. Overrides RN SDK

为了让工程依赖同一个版本的 RN SDK,需要在工程根目录的 oh-package.json5 添加 overrides 字段,指向工程需要使用的 RN SDK 版本。替换的版本既可以是一个具体的版本号,也可以是一个模糊版本,还可以是本地存在的 HAR 包或源码目录。

关于该字段的作用请阅读官方说明

{
  "overrides": {
    "@rnoh/react-native-openharmony": "^0.82.25" // ohpm 在线版本
    // "@rnoh/react-native-openharmony" : "./react_native_openharmony.har" // 指向本地 har 包的路径
    // "@rnoh/react-native-openharmony" : "./react_native_openharmony" // 指向源码路径
  }
}

2. 引入原生端代码

目前有两种方法:

  • 通过 har 包引入;
  • 直接链接源码。

方法一:通过 har 包引入(推荐)

har 包位于三方库安装路径的 `harmony` 文件夹下。

打开 entry/oh-package.json5,添加以下依赖

"dependencies": {
    "@react-native-ohos/react-native-device-info": "file:../../node_modules/@react-native-ohos/react-native-device-info/harmony/device_info.har"
  }

点击右上角的 sync 按钮

或者在命令行终端执行:

cd entry
ohpm install

方法二:直接链接源码

如需使用直接链接源码,请参考[直接链接源码说明](/zh-cn/link-source-code.md)

3. 配置 CMakeLists 和引入 RNDeviceInfoPackage

打开 entry/src/main/cpp/CMakeLists.txt,添加:

project(rnapp)
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(NODE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../node_modules")
+ set(REACT_NATIVE_DEVICE_INFO_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules/@react-native-ohos/react-native-device-info/src/main/cpp")
set(RNOH_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../react-native-harmony/harmony/cpp")
set(LOG_VERBOSITY_LEVEL 1)
set(CMAKE_ASM_FLAGS "-Wno-error=unused-command-line-argument -Qunused-arguments")
set(CMAKE_CXX_FLAGS "-fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIE -pie")
set(WITH_HITRACE_SYSTRACE 1) # for other CMakeLists.txt files to use
add_compile_definitions(WITH_HITRACE_SYSTRACE)

add_subdirectory("${RNOH_CPP_DIR}" ./rn)

# RNOH_BEGIN: manual_package_linking_1
add_subdirectory("../../../../sample_package/src/main/cpp" ./sample-package)
+ add_subdirectory("${REACT_NATIVE_DEVICE_INFO_CPP_DIR}" ./device_info)
# RNOH_END: manual_package_linking_1

file(GLOB GENERATED_CPP_FILES "./generated/*.cpp")

add_library(rnoh_app SHARED
    ${GENERATED_CPP_FILES}
    "./PackageProvider.cpp"
    "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
)
target_link_libraries(rnoh_app PUBLIC rnoh)

# RNOH_BEGIN: manual_package_linking_2
target_link_libraries(rnoh_app PUBLIC rnoh_sample_package)
+ target_link_libraries(rnoh_app PUBLIC device_info)
# RNOH_END: manual_package_linking_2

打开 entry/src/main/cpp/PackageProvider.cpp,添加:

#include "RNOH/PackageProvider.h"
#include "SamplePackage.h"
+ #include "RNDeviceInfoPackage.h"

using namespace rnoh;

std::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {
    return {
      std::make_shared<SamplePackage>(ctx),
+     std::make_shared<RNDeviceInfoPackage>(ctx),
    };
}

4. 在 ArkTs 侧引入 RNDeviceInfoPackage

打开 entry/src/main/ets/RNPackagesFactory.ts,添加:

  ...
+ import {RNDeviceInfoPackage} from '@react-native-ohos/react-native-device-info/ts';

export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
  return [
+    new RNDeviceInfoPackage(ctx)
  ];
}

运行

点击右上角的 sync 按钮

或者在命令行终端执行:

cd entry
ohpm install

然后编译、运行即可。

约束与限制

兼容性

本文档内容基于以下版本验证通过:

  1. RNOH: 0.82.25; SDK: HarmonyOS 6.0.1 Release SDK; IDE: DevEco Studio 6.0.1 Release; ROM:6.0.0.120 SP7;
  2. RNOH: 0.84.30; SDK: HarmonyOS 6.0.1 Release SDK; IDE: DevEco Studio 6.0.1 Release; ROM:6.0.0.120 SP7;

权限要求

"ohos.permission.DISTRIBUTED_DATASYNC" 权限用于getDeviceName接口,

"ohos.permission.GET_WIFI_INFO" 权限用于getMacAddress/getMacAddressSync接口,

"ohos.permission.GET_NETWORK_INFO" 接口用于getIpAddress/getIpAddressSync

打开 entry/src/main/module.json5,添加:

...
"requestPermissions": [
  {
    "name": "ohos.permission.GET_NETWORK_INFO"
  },
  {
    "name": "ohos.permission.GET_WIFI_INFO"
  },
  {
    "name": "ohos.permission.DISTRIBUTED_DATASYNC",
    "reason": "$string:DATA_SYNC",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "always"
    }
  }
]

使用示例

下面的代码展示了这个库的基本使用场景:

使用时 import 的库名不变。

import React from "react";
import { View, Text } from "react-native";
import DeviceInfo from "react-native-device-info";

const App = () => {
  const model = DeviceInfo.getModel(); 
  const bundleId = DeviceInfo.getBundleId();

  return (
    <View style={{ flex: 1 }}>
      <Text>Model: {model}</Text>
      <Text>Bundle ID: {bundleId}</Text>
    </View>
  );
};

export default App;

[!注意事项] 如果调用 getFontScale接口,需要进行以下配置。

1. harmony/AppScope/resources/base/profile文件夹下面新增configuration.json文件,内容如下:

{
  "configuration": {
    "fontSizeScale": "followSystem",
    "fontSizeMaxScale": "3.2"
  }
}

2.在harmony/AppScope/app.json5 文件中配置 "configuration": "$profile:configuration" 如下:
{
  "app": {
    "bundleName": "com.example.test",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "distributedNotificationEnabled": true,
  + "configuration": "$profile:configuration"
  }
}

使用说明

基本用法

import DeviceInfo from 'react-native-device-info';
import {getManufacturer, getManufacturerSync} from 'react-native-device-info';

// 异步获取(Promise)
DeviceInfo.getManufacturer().then((manufacturer) => {
  console.log('manufacturer:', manufacturer);
});

// 同步获取
const mac = DeviceInfo.getMacAddressSync();
const manufacturer = getManufacturerSync();

Hooks 用法

import React from 'react';
import {
  useBatteryLevel,
  useDeviceName,
  useManufacturer,
  usePowerState,
} from 'react-native-device-info';

const App = () => {
  const batteryLevel = useBatteryLevel();   // 电池电量
  const deviceName = useDeviceName();       // 设备名称
  const manufacturer = useManufacturer();   // 制造商
  const powerState = usePowerState();       // 电源状态
  return (
    <Text>
      电量:{batteryLevel}  设备:{deviceName}
    </Text>
  );
};

事件监听

import React from 'react';
import { useIsHeadphonesConnected,  useIsWiredHeadphonesConnected } from 'react-native-device-info';

const App = () => {
  // 监听耳机连接状态变化,状态改变时组件会自动更新
  const isHeadphonesConnected = useIsHeadphonesConnected();       // 任意耳机(蓝牙/有线)
  const isWiredHeadphonesConnected = useIsWiredHeadphonesConnected(); // 有线耳机
  return <Text>{isHeadphonesConnected ? '耳机已连接' : '耳机未连接'}</Text>;
};

接口说明

"Platform"列表示该属性在原三方库上支持的平台。

"OpenHarmony Support"列为 yes 表示 OpenHarmony平台支持 该属性;no 则表示不支持;partially 表示部分支持。使用方法跨平台一致,效果对标 iOS 或 Android 的效果。

API

名称 类型 参数类型 返回值 必填 平台 OpenHarmony平台支持 描述
getAndroidId function / Promise<string> No Android no 获取 ANDROID_ID。请参阅 API 文档了解正确使用方法。
getAndroidIdSync function / string No Android no 获取 ANDROID_ID。请参阅 API 文档了解正确使用方法。
getApiLevel function / Promise<number> No Android yes 获取 API 级别。
getApiLevelSync function / number No Android yes 获取 API 级别。
getApplicationName function / string No IOS/Android/Windows/visionOS yes 获取应用程序名称。
getAvailableLocationProviders function / Promise<object> No IOS/Android/visionOS yes 返回特定平台位置提供者/服务的对象,包含当前是否可用的布尔值。
getAvailableLocationProvidersSync function / object No IOS/Android/visionOS yes 返回特定平台位置提供者/服务的对象,包含当前是否可用的布尔值。
getBaseOs function / Promise<string> No Android/Windows/Web yes 产品所基于的基础操作系统构建版本。
getBaseOsSync function / string No Android/Windows/Web yes 产品所基于的基础操作系统构建版本。
getBuildId function / Promise<string> No IOS/Android/Windows/visionOS yes 获取操作系统的构建编号。
getBuildIdSync function / string No IOS/Android/Windows/visionOS yes 获取操作系统的构建编号。
getBatteryLevel function / Promise<number> No IOS/Android /Windows/Web/visionOS yes 获取设备电池电量,返回 0 到 1 之间的浮点数。
getBatteryLevelSync function / number No IOS/Android /Windows/Web/visionOS yes 获取设备电池电量,返回 0 到 1 之间的浮点数。
getBootloader function / Promise<string> No Android yes 系统引导程序版本号。
getBootloaderSync function / string No Android yes 系统引导程序版本号。
getBrand function / string No IOS/Android/Windows/visionOS yes 获取设备品牌。
getBuildNumber function / string No IOS/Android/Windows/visionOS yes 获取应用程序构建编号。
getBundleId function / string No IOS/Android/Windows/visionOS yes 获取应用程序包标识符。
isCameraPresent function / Promise<boolean> No Android/Windows/Web yes 判断设备当前是否有摄像头。
isCameraPresentSync function / boolean No Android/Windows/Web yes 判断设备当前是否有摄像头。
getCarrier function / Promise<string> No IOS/Android yes 获取运营商名称(网络运营商)。
getCarrierSync function / string No IOS/Android no 获取运营商名称(网络运营商)。
getCodename function / Promise<string> No Android yes 当前开发代号,如果是发布版本则为字符串"REL"。
getCodenameSync function / string No Android yes 当前开发代号,如果是发布版本则为字符串"REL"。
getDevice function / Promise<string> No Android yes 工业设计名称。
getDeviceSync function / string No Android yes 工业设计名称。
getDeviceId function / string No IOS/Android/Windows/visionOS no 获取设备 ID。
getDeviceType function / string No IOS/Android/visionOS yes 返回设备类型的字符串。
getDeviceTypeSync function / string No IOS/Android/visionOS yes 返回设备类型的字符串。
getDisplay function / Promise<string> No Android yes 用于向用户显示的构建 ID 字符串。
getDisplaySync function / string No Android yes 用于向用户显示的构建 ID 字符串。
getDeviceName function / Promise<string> No IOS/Android/Windows/visionOS yes 获取设备名称。
getDeviceNameSync function / string No IOS/Android/Windows/visionOS no 获取设备名称。
getDeviceToken function / Promise<string> No IOS/visionOS no 获取设备令牌(参见 DeviceCheck)。仅适用于 iOS 11.0+ 的真实设备。当不支持 getDeviceToken 时会拒绝 Promise,请注意异常处理。
getFirstInstallTime function / Promise<number> No IOS/Android/Windows/visionOS yes 获取应用首次安装的时间(毫秒)。
getFirstInstallTimeSync function / number No IOS/Android/Windows/visionOS yes 获取应用首次安装的时间(毫秒)。
getFingerprint function / Promise<string> No Android yes 唯一标识此构建的字符串。
getFingerprintSync function / string No Android yes 唯一标识此构建的字符串。
getFontScale function / Promise<number> No IOS/Android/Windows yes 获取设备字体缩放比例。字体缩放比例是当前系统字体与"正常"字体大小的比率。如果正常文本为 10pt 而系统字体当前为 15pt,则字体缩放比例为 1.5。这可用于确定设备的无障碍设置是否已更改;如果字体缩放比例明显较大(> 2.0),您可能需要重新布局某些视图。
getFontScaleSync function / number No IOS/Android/Windows yes 获取设备字体缩放比例。字体缩放比例是当前系统字体与"正常"字体大小的比率。如果正常文本为 10pt 而系统字体当前为 15pt,则字体缩放比例为 1.5。这可用于确定设备的无障碍设置是否已更改;如果字体缩放比例明显较大(> 2.0),您可能需要重新布局某些视图。
getFreeDiskStorage function / Promise<number> No IOS/Android/Windows/Web/visionOS no 获取可用存储空间大小的方法(字节),考虑根文件系统和数据文件系统的计算。
getFreeDiskStorageSync function / number No IOS/Android/Windows/Web/visionOS no 获取可用存储空间大小的方法(字节),考虑根文件系统和数据文件系统的计算。
getFreeDiskStorageOld function / Promise<number> No IOS/Android/Windows/Web/visionOS no 获取可用存储空间大小的旧实现方法(字节)。
getFreeDiskStorageOldSync function / number No IOS/Android/Windows/Web/visionOS no 获取可用存储空间大小的旧实现方法(字节)。
getHardware function / Promise<string> No Android yes 硬件名称(来自内核命令行或 /proc)。
getHardwareSync function / string No Android yes 硬件名称(来自内核命令行或 /proc)。
getHost function / Promise<string> No Android/Windows yes 主机名。
getHostSync function / string No Android/Windows yes 主机名。
getHostNames function / Promise<string[]> No Windows no 主机名列表。
getHostNamesSync function / string[] No Windows no 主机名列表。
getIpAddress function / Promise<string> No IOS/Android/Windows/visionOS yes 已弃用。获取设备当前 IP 地址(仅 WiFi)。请切换到 react-native-netinfo/netinfo 或 react-native-network-info。
getIpAddressSync function / string No IOS/Android/Windows/visionOS yes 已弃用。获取设备当前 IP 地址(仅 WiFi)。请切换到 react-native-netinfo/netinfo 或 react-native-network-info。
getIncremental function / Promise<string> No Android yes 系统每次构建的唯一识别码。
getIncrementalSync function / string No Android yes 系统每次构建的唯一识别码。
getInstallerPackageName function / Promise<string> No IOS/Android/Windows/visionOS yes 获取当前应用是由哪个“安装器”应用安装的。
getInstallerPackageNameSync function / string No IOS/Android/Windows/visionOS yes 获取当前应用是由哪个“安装器”应用安装的。
getInstallReferrer function / Promise<string> No Android/Windows/Web no 获取应用安装时的来源引用字符串。
getInstallReferrerSync function / string No Android/Windows/Web no 获取应用安装时的来源引用字符串。
getInstanceId function / Promise<string> No Android yes 获取应用程序实例 ID。
getInstanceIdSync function / string No Android yes 获取应用程序实例 ID。
getLastUpdateTime function / Promise<number> No Android yes 获取应用最后更新时间(毫秒)。
getLastUpdateTimeSync function / number No Android yes 获取应用最后更新时间(毫秒)。
getMacAddress function / Promise<string> No IOS/Android/visionOS yes 获取网络适配器 MAC 地址。
getMacAddressSync function / string No IOS/Android/visionOS yes 获取网络适配器 MAC 地址。
getManufacturer function / Promise<string> No IOS/Android/visionOS yes 获取设备制造商。
getManufacturerSync function / string No IOS/Android/visionOS yes 获取设备制造商。
getMaxMemory function / Promise<number> No Android/Windows/Web yes 返回虚拟机将尝试使用的最大内存量(字节)。
getMaxMemorySync function / number No Android/Windows/Web yes 返回虚拟机将尝试使用的最大内存量(字节)。
getModel function / string No IOS/Android yes 获取设备型号。
getPowerState function / Promise<object> No IOS/Android/Windows/Web/visionOS yes 获取设备电源状态,包括电池电量、是否正在充电以及系统是否处于低功耗模式。
getPowerStateSync function / object No IOS/Android/Windows/Web/visionOS yes 获取设备电源状态,包括电池电量、是否正在充电以及系统是否处于低功耗模式。
getProduct function / Promise<string> No Android yes 整体产品名称。
getProductSync function / string No Android yes 整体产品名称。
getPreviewSdkInt function / Promise<number> No Android no 预发布 SDK 的开发人员预览修订版。
getPreviewSdkIntSync function / number No Android no 预发布 SDK 的开发人员预览修订版。
getReadableVersion function / string No IOS/Android/Windows/visionOS yes 获取应用程序人类可读版本(等同于 getVersion() + '.' + getBuildNumber())。
getSerialNumber function / Promise<string> No Android/Windows no 获取设备序列号。在绝大多数情况下会是 'unknown',除非您拥有特权应用并且知道自己在做什么。
getSerialNumberSync function / string No Android/Windows no 获取设备序列号。在绝大多数情况下会是 'unknown',除非您拥有特权应用并且知道自己在做什么。
getSecurityPatch function / Promise<string> No Android yes 用户可见的安全补丁级别。
getSecurityPatchSync function / string No Android yes 用户可见的安全补丁级别。
getSystemAvailableFeatures function / Promise<string[]> No Android no 返回 Android 上可用的系统功能列表。
getSystemAvailableFeaturesSync function / string[] No Android no 返回 Android 上可用的系统功能列表。
getSystemName function / string No IOS/Android/Windows/visionOS yes 获取设备操作系统名称。
getSystemVersion function / string No IOS/Android/Windows/visionOS yes 获取设备操作系统版本。
getTags function / Promise<string> No Android no 描述构建的逗号分隔标签。
getTagsSync function / string No Android no 描述构建的逗号分隔标签。
getType function / Promise<string> No Android yes 构建类型。
getTypeSync function / string No Android yes 构建类型。
getTotalDiskCapacity function / Promise<number> No Android no 获取完整磁盘存储空间大小的方法(字节),考虑根文件系统和数据文件系统的计算。
getTotalDiskCapacitySync function / number No Android no 获取完整磁盘存储空间大小的方法(字节),考虑根文件系统和数据文件系统的计算。
getTotalDiskCapacityOld function / Promise<number> No Android no 获取完整磁盘存储空间大小的旧实现方法(字节)。
getTotalDiskCapacityOldSync function / number No Android no 获取完整磁盘存储空间大小的旧实现方法(字节)。
getTotalMemory function / Promise<number> No IOS/Android/Web/visionOS yes 获取设备总内存(字节)。
getTotalMemorySync function / number No IOS/Android/Web/visionOS yes 获取设备总内存(字节)。
getUniqueId function / Promise<string> No IOS/Android/Windows/visionOS no 获取设备唯一 ID。在 Android 上,当前与此模块中的相同。
getUniqueIdSync function / string No IOS/Android/Windows/visionOS no 获取设备唯一 ID。在 Android 上,当前与此模块中的相同。
getUsedMemory function / Promise<number> No IOS/Android/Windows/Web/visionOS yes 获取应用程序内存使用量(字节)。
getUsedMemorySync function / number No IOS/Android/Windows/Web/visionOS yes 获取应用程序内存使用量(字节)。
getUserAgent function / Promise<string> No IOS/Android/Web/visionOS yes 获取设备用户代理。
getUserAgentSync function / string No Android/Web yes 获取设备用户代理。
getVersion function / string No IOS/Android/Windows/visionOS yes 获取应用程序版本。请注意版本字符串是设备/操作系统格式的,可能包含任何额外数据(如构建编号等)。如果您想确定版本格式,可以使用正则表达式从返回的版本字符串中获取所需部分。
getBrightness function / Promise<number> No IOS yes 获取设备主屏幕的当前亮度级别。目前仅限 iOS。返回 0.0 到 1.0 之间的数字(包含)。
getBrightnessSync function / number No IOS yes 获取设备主屏幕的当前亮度级别。目前仅限 iOS。返回 0.0 到 1.0 之间的数字(包含)。
hasGms function / Promise<boolean> No Android yes 判断设备是否支持 Google 移动服务。
hasGmsSync function / boolean No Android yes 判断设备是否支持 Google 移动服务。
hasHms function / Promise<boolean> No Android yes 判断设备是否支持华为移动服务。
hasHmsSync function / boolean No Android yes 判断设备是否支持华为移动服务。
hasNotch function / Promise<boolean> No IOS/Android/Windows/visionOS no 判断设备是否有刘海屏。
hasDynamicIsland function / boolean No IOS/Android/Windows/visionOS no 判断设备是否有动态岛。
hasSystemFeature function string Promise<boolean> No Android no 判断设备是否有特定的系统功能。
hasSystemFeatureSync function string boolean No Android no 判断设备是否有特定的系统功能。
isAirplaneMode function / Promise<boolean> No Android/ Web no 判断设备是否处于飞行模式。
isAirplaneModeSync function / boolean No Android/ Web no 判断设备是否处于飞行模式。
isBatteryCharging function / Promise<boolean> No IOS/Android/Windows/Web/visionOS yes 判断电池是否正在充电。
isBatteryChargingSync function / boolean No IOS/Android/Windows/Web/visionOS yes 判断电池是否正在充电。
isEmulator function / Promise<boolean> No IOS/Android/Windows/visionOS no 判断应用程序是否在模拟器中运行。
isEmulatorSync function / boolean No IOS/Android/Windows/visionOS no 判断应用程序是否在模拟器中运行。
isKeyboardConnected function / Promise<boolean> No Windows yes 判断设备是否连接了键盘。
isKeyboardConnectedSync function / boolean No Windows no 判断设备是否连接了键盘。
isLandscape function / Promise<boolean> No IOS/Android/Windows/visionOS yes 判断设备是否当前处于横屏模式。
isLandscapeSync function / boolean No IOS/Android/Windows/visionOS yes 判断设备是否当前处于横屏模式。
isLocationEnabled function / Promise<boolean> No IOS/Android/Web/visionOS yes 允许访问用户的位置信息。
isLocationEnabledSync function / boolean No IOS/Android/Web/visionOS yes 允许访问用户的位置信息。
isMouseConnected function / Promise<boolean> No Windows yes 判断设备是否连接了鼠标。
isMouseConnectedSync function / boolean No Windows no 判断设备是否连接了鼠标。
isHeadphonesConnected function / Promise<boolean> No IOS/Android/visionOS yes 判断设备是否连接了耳机。
isHeadphonesConnectedSync function / boolean No IOS/Android/visionOS yes 判断设备是否连接了耳机。
isWiredHeadphonesConnected function / Promise<boolean> No IOS/Android/visionOS yes 判断设备是否连接了有线耳机。
isWiredHeadphonesConnectedSync function / boolean No IOS/Android/visionOS yes 判断设备是否连接了有线耳机。
isBluetoothHeadphonesConnected function / Promise<boolean> No IOS/Android/visionOS yes 判断设备是否连接了蓝牙耳机。
isBluetoothHeadphonesConnectedSync function / boolean No IOS/Android/visionOS yes 判断设备是否连接了蓝牙耳机。
isPinOrFingerprintSet function / Promise<boolean> No IOS/Android/Windows/visionOS yes 判断是否为设备设置了 PIN 码或指纹。
isPinOrFingerprintSetSync function / boolean No IOS/Android/Windows/visionOS no 判断是否为设备设置了 PIN 码或指纹。
isTablet function / boolean No IOS/Android/Windows/visionOS yes 判断设备是否为平板电脑。
isLowRamDevice function / Promise<boolean> No Android no 判断设备是否内存不足。
isDisplayZoomed function / boolean No IOS no 判断用户是否将显示缩放更改为放大模式。
isTabletMode function / Promise<boolean> No Windows no 判断设备是否处于平板模式。
supported32BitAbis function / Promise<string[]> No Android yes 设备支持 32 位 ABI。
supported32BitAbisSync function / string[] No Android yes 设备支持 32 位 ABI。
supported64BitAbis function / Promise<string[]> No Android yes 设备支持 64 位 ABI。
supported64BitAbisSync function / string[] No Android yes 设备支持 64 位 ABI。
supportedAbis function / Promise<string[]> No IOS/Android/Windows/visionOS yes 设备支持的 ABI。
supportedAbisSync function / string[] No IOS/Android/Windows/visionOS yes 设备支持的 ABI。
syncUniqueId function / Promise<string> No IOS/visionOS no 此方法专为 iOS 设计,它将 uniqueId 与 IDFV 同步或设置新的随机字符串。在 iOS 上使用 DeviceUID uid 标识符。在其他平台上,仅调用此模块中的 getUniqueId()。
getSupportedMediaTypeList function / Promise<string[]> No IOS/Android yes 此方法获取支持的媒体编解码器列表。
getSupportedMediaTypeListSync function / string[] No IOS/Android no 此方法获取支持的媒体编解码器列表。
getStartupTime14.0.4+ function / Promise<number> No iOS/Android/visionOS yes 获取当前应用程序进程启动的时间,单位为毫秒。
getStartupTimeSync14.0.4+ function / number No iOS/Android/visionOS yes 获取当前应用程序进程启动的时间,单位为毫秒。
getAppSetId function / Promise<object> No Android no 获取应用集ID。
useBatteryLevel function / number | null No IOS/Android/Windows/Web/visionOS yes React hook,用于监听原生模块发出的电池电量更新。
useBatteryLevelIsLow function / number | null No IOS/Android/Windows/Web/visionOS yes React hook,用于在电池电量低于阈值时发出通知。
usePowerState function / Partial<PowerState> No IOS/Android/Windows/Web/visionOS yes React hook,用于订阅电源状态变化并返回部分 PowerState。
useIsHeadphonesConnected function / AsyncHookResult<boolean> No IOS/Android/visionOS yes React hook,用于判断是否连接了任意耳机(蓝牙或有线)。
useIsWiredHeadphonesConnected function / AsyncHookResult<boolean> No IOS/Android/visionOS yes React hook,用于判断是否连接了有线耳机。
useIsBluetoothHeadphonesConnected function / AsyncHookResult<boolean> No IOS/Android/visionOS yes React hook,用于判断是否连接了蓝牙耳机。
useFirstInstallTime function / AsyncHookResult<number> No IOS/Android/Windows/visionOS yes React hook,用于获取应用首次安装的时间戳。
useDeviceName function / AsyncHookResult<string> No IOS/Android/Windows/visionOS yes React hook,用于获取可读的设备名称。
useManufacturer function / AsyncHookResult<string> No IOS/Android/visionOS yes React hook,用于获取设备制造商字符串。
useBrightness function / number | null No IOS yes React hook,用于订阅 iOS 屏幕亮度变化。
isLowBatteryLevel function number boolean No IOS/Android/Windows/visionOS yes 判断电量值是否处于低电量。
useHasSystemFeature function string AsyncHookResult<boolean> No Android no React hook,用于判断设备是否有特定的系统功能。
useIsEmulator function / AsyncHookResult<boolean> No IOS/Android/Windows/visionOS no React hook,用于判断应用程序是否在模拟器中运行。

AppSetIdInfo: 获取应用集ID接口返回的数据类型

Name Description Type Required Platform HarmonyOS Support
id AppSetId 字符串值(不可用时返回 "unknown") string yes Android no
scope AppSetId 的作用域(1 = SCOPE_APP,2 = SCOPE_DEVELOPER,不可用时返回 -1) number yes Android no

属性

DeviceType 类型值列表

Name Description Type Required Platform HarmonyOS Support
Handset 手持设备 string No IOS/Android/visionOS No
Tablet 平板电脑 string No IOS/Android/visionOS yes
Tv 电视 string No IOS/Android/visionOS yes
Desktop 台式电脑或笔记本 string No IOS/Android/visionOS No
GamingConsole 游戏主机 string No IOS/Android/visionOS No
unknown 未知设备类型 string No IOS/Android/visionOS No

BatteryState 类型值列表

Name Description Type Required Platform HarmonyOS Support
unknown 未知 string No IOS/Android/Windows/Web/visionOS yes
unplugged 未插电 string No IOS/Android/Windows/Web/visionOS yes
charging 正在充电 string No IOS/Android/Windows/Web/visionOS yes
full 已充满 string No IOS/Android/Windows/Web/visionOS yes

遗留问题

其他

无

目录结构

/rntpc_react-native-device-info  # 项目根目录
├── harmony                     # 鸿蒙适配代码
│    └─ device_info.har         # har包
│    └─ device_info             # 鸿蒙适配核心代码
│          └─ index.ets         # 鸿蒙适配代码入口
│          └─ src/main/ets
│              └─ RNDeviceInfoModule.ts  # 设备信息原生模块
│              └─ RNDeviceInfoPackage.ts # 包注册
├── src                         # RN代码
│    └─ index.ts                # 入口文件
│    └─ RNDeviceInfo.ts         # 设备信息主逻辑
│    └─ NativeRNDeviceInfo.ts   # 原生模块类型定义
│    └─ internal/               # 内部工具函数
├── example                     # 示例项目
├── README.md                   # 中文安装使用方法
├── README_en.md                # 英文README

贡献代码

使用过程中发现任何问题都可以提交 Issue,当然,也非常欢迎提交 PR 。

开源协议

本项目基于 The MIT License (MIT) ,请自由地享受和参与开源。

项目介绍

基于 react-native-device-info 的 OpenHarmony 适配版,获取设备信息(型号、系统版本、ID 等)

定制我的领域