React Native读取系统属性

react narive获取本地文件并上传到服务器 工作中遇到要在APP中上传Excel的需求,找了老半天,试过react-native-fs,但是不好用,要么就是只能上传图片的,后来发现这个第三方库完美的符合需求,他不仅可以上传Excel,基本上现有的文件他都可以吧!具体查看文档!这个库就是:react-native-document-picker 用法举例: 先install下来: npm i --save react-native-document-picker 在iOS文件夹下 pod安装 pod install 导入文件 import Docu 阅读详情

一、背景

        前段时间,公司需要用React Native做一套电视机顶盒上的视频播放系统,而其中有一项功能是需要读取到机顶盒的卡号,这个卡号提前被生产商写入了系统属性,叫“persist.sys.mmcp.smarcardid”,通过在命令行运行adb shell后,再运行getprop命令可以查出来,如下图:

        但React Native本身并不提供直接读取系统属性的功能,这时候就需要手动开发一个原生插件来完成这项功能,具体步骤如下。

 二、创建插件

1、创建SystemProperty类

在android\app\src\main\java\com\videoplayer下创建一个java类SystemProperty.java

 源码如下:

package com.videoplayer;

import android.widget.Toast;

import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import androidx.annotation.NonNull;

public class SystemProperty extends ReactContextBaseJavaModule {

    private static ReactApplicationContext reactContext;

    private static Method sysPropGet;
    private static Method sysPropSet;

    static {
        try {
            Class<?> S = Class.forName("android.os.SystemProperties");
            Method M[] = S.getMethods();
            for (Method m : M) {
                String n = m.getName();
                if (n.equals("get")) {
                    sysPropGet = m;
                } else if (n.equals("set")) {
                    sysPropSet = m;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public SystemProperty(ReactApplicationContext context) {
        super(context);
        reactContext = context;
    }

    @NonNull
    @Override
    public String getName() {
        return "SystemProperty";
    }

    @ReactMethod
    public void getSystemProperty(String name,Promise promise) {
        try {
            String value=(String) sysPropGet.invoke(null, name,"");
            promise.resolve(value);
        } catch (Exception e) {
            Toast.makeText(getReactApplicationContext(), "获取卡号出错", Toast.LENGTH_LONG).show();
            promise.reject("获取卡号出错", e);
            e.printStackTrace();
        }
    }
}

该类继承了ReactContextBaseJavaModule,这是开发React Native插件必须要继承的类,并在getName方法中返回SystemProperty,当然也可以返回其他名字,这个名字是在前端JavaScript中要用到的。其中getSystemProperty方法的第一个参数为要获取的系统属性名,第二个参数为Promise类型,在JavaScript端可以使用awiat或then的方式获取数据。

Java 方法需要使用注解@ReactMethod。方法的返回类型必须为void。React Native 的跨语言访问是异步进行的,所以想要给 JavaScript 返回一个值的唯一办法是使用回调函数或者发送事件。

2、创建SystemPropertyPackage类

在 Java 这边要做的最后一件事就是注册这个模块。我们需要在应用的 Package 类的createNativeModules方法中添加这个模块。如果模块没有被注册,它也无法在 JavaScript 中被访问到。在android\app\src\main\java\com\videoplayer下创建一个java类SystemPropertyPackage.java。这个 package 需要在MainApplication.java文件的getPackages方法中提供。这个文件位于你的 react-native 应用文件夹的 android 目录中。

 源码如下:

package com.videoplayer;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import androidx.annotation.NonNull;

public class SystemPropertyPackage implements ReactPackage {
    @NonNull
    @Override
    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();

        modules.add(new SystemProperty(reactContext));

        return modules;
    }

    @NonNull
    @Override
    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}

3、修改MainApplication类 

在MainApplication.java中添加如下行,注册SystemProperty插件

三、使用插件

import {
    NativeModules
} from 'react-native';


let value=await NativeModules.SystemProperty.getSystemProperty("persist.sys.mmcp.smarcardid");

react native AsyncStorage 使用实例 异步存储数据以及读取 简介 常用API 读取数据 写入数据 删除数据 更多API 保存目录 iOS端 Android 使用实例 异步存储数据 异步读取数据 异步删除某条数据 异步删除所有数据 同步读取数据 同步存储数据 简介AsyncStorage是一个简单的、异步的、持久化的Key-Value存储系统,它对于App来说是全局性的。 在真正使用的过程中建议在AsyncStorage的基础上做一层抽象封装,而不是直接使用 阅读详情

相关推荐

C#安装OpenCv及打开笔记本默认摄像头方法

C#安装OpenCv及打开笔记本默认摄像头方法

cg1135217680的博客 2566

ReactNative读取Native本地文件

1, LatticeMockModule.java 声明一个Native模块给RN提供调用 /**此类为RN提供读取配置文件的功能*/ public class LatticeMockModule extends ReactContextBaseJavaModule { .... private final static String REACT_CLASS = "LatticeMo

非鹭千里 1万+

保姆级教程 | MS构建三层石墨后转成LAMMPS的data文件

喜欢的话记得一键三连~

baguette的博客 2940

React Native文件读写操作(更新)

最近公司项目要求进行定时上传位置信息,及埋点,因为使用的是RN开发,一开始就是想到在Android和Ios原生里进行操作。 在原生里面实现了定时任务,Android里面使用的是broadcastReceive + service + timer实现了。 现在需要生成一个日志文件,一开始想在原生里面进行实现文件的读写。后来查找相关资料,发现了一个不错的第三方插件,react-native-fs,现在记录一下,集成步骤及简单的文件读写操作。 插件地址:https://github.com/itinance/re

wayne214的博客 4344

关于动态存储器dram中rank,bank,device之间的关系

DEVICE_WIDTH表示设备的带宽(单位bit),每个列(column)包含DEVICE_WIDTH 位(bit),每一行(row)包含NUM_COLS个column。   而每一个bank包含NUM_ROWS个行(row)。所以一个设备(device)的存储容量为PER_DEVICE_STORAGE =NUM_ROWS*NUM_COLS*DEVICE_WIDTH*NUM_BANKS (i

wyj7260的专栏 4724

AI自动化流程在金融风控中的3个典型案例

AI自动化风控流程全流程自动化:最小化人工干预,实现从数据输入到决策输出的闭环自适应学习:通过持续数据反馈实现模型自动迭代优化实时决策能力:满足毫秒级(支付风控)至分钟级(信贷审批)的响应需求多模态数据融合:整合结构化、非结构化和实时流数据智能决策解释:自动生成符合监管要求的决策解释人机协同机制:在高风险场景下实现AI与人类专家的协同决策实施后关键绩效指标(KPI)变化指标实施前实施后改进幅度平均审批时间3.2天4.7分钟-99.7%自动审批率15%85%+467%

架构师的AI之路,分享AI应用开发架构的学习与实践。 1531

React Native获取移动设备信息(react-native-device-info)如何使用?

React Native获取移动设备信息(react-native-device-info)如何使用? 组件说明 组件使用介绍 ios如何使用 android如何使用 组件说明 该组件是一个第三方的获取移动设备信息的一个组件,适用于ios和android双平台 组件使用介绍 在ReactNative中使用第三方组件,都必须要下载依赖包 我们一般都是使用命令行来执行下载: 进入项目执行

Mr. Q 4589

016、自动标注方案实战:用大模型(SAM/Grounding DINO)生成 YOLO 格式伪标签

本文介绍了一种利用大模型自动生成YOLO格式伪标签的实战方案。针对传统人工标注效率低、易出错的问题,作者提出结合Grounding DINO(零样本检测)和SAM(精细分割)的优势:前者快速生成候选框,后者优化边界精度。文章详细阐述了技术选型理由(平衡速度与精度)、环境搭建避坑指南(关键依赖版本)、核心三步流程(检测-分割-格式转换)以及后处理技巧(置信度分级过滤)。实验表明,该方案相比纯人工标注可节省80%时间,且经过SAM优化的边界框精度提升10-15%。特别强调了工程细节:文本描述格式、阈值设定、小目

zzfmlxs的博客 535

react-native移动端如何获取设备信息

这次介绍的获取移动设备信息的组件名叫:react-native-device-info,兼容IOS和安卓双平台,可以获取设备ID、设备品牌、设备型号、IP以及APP版本号等信息。是一个应用很广泛的基础组件。 亲测可用,已在双端真机上测试,均能获取到设备信息! 安装 npm install --save react-native-device-info 注:如果React Naitve的版...

hzxOnlineOk的博客 5419

级联H桥构网型储能SVG系统设计与VSG控制策略研究

随着新能源渗透率不断提高,电力系统惯量和阻尼水平持续下降,传统跟网型控制策略在弱电网条件下的稳定性面临严峻挑战。构网型控制以电压源方式运行,能够为系统提供惯量和频率支撑,成为当前研究热点。本文针对10kV/10Mvar级联H桥构网型储能静止无功发生器(SVG),采用星形连接拓扑结构,设计了基于虚拟同步发电机(VSG)的构网型控制策略。文章从主电路拓扑设计、数学建模、VSG控制策略设计、调制策略、直流电压平衡控制、系统参数设计、仿真建模和硬件实现等八个方面展开系统论述,给出了完整的Simulink仿真模型~~

huanghm88的专栏 338

Windows 11 安装、使用 Git:下载、安装、概念、命令、分支模型

本文详细介绍了在 Windows 11 系统上安装与使用 Git 的完整流程,涵盖从官方或国内镜像下载安装包、关键安装选项配置,到 Git 核心概念(如工作区、暂存区、分支、远程仓库等)的通俗解释。同时梳理了常用命令与五种主流 Git 分支模型(如 Git Flow、GitHub Flow 等),帮助开发者根据项目规模选择合适的工作流,是面向初学者与进阶用户的实用指南。

寒水馨 · 轻量级技术文档 · hanshuixin.org 2357

React Native集成react-native-fs(本地文件系统)

安装 #安装 npm install --save react-native-fs #链接依赖 react-native link react-native-fs 工具类(可直接调用) /** * FileName: RNFSUtils.js * Author: hf * Date: 2019/2/11 14:39 * Description:封装对文件的【下载、文本写入、文本...

战丶后风!!的博客 9865

大疆 2021 嵌入式笔试题

在深圳做嵌入式,大疆公司绝对是 Top 级别的,大疆的技术栈也很深。

qq_38769551的博客 2489

ReactJS 101移动开发:用React Native构建跨平台原生应用的终极指南

想要学习如何用React Native快速构建跨平台移动应用吗?React Native作为Facebook推出的开源框架,让开发者可以使用JavaScript和React构建真正的原生移动应用。本文将为你提供完整的React Native入门指南,从环境搭建到项目部署,一步步教你掌握这个强大的移动开发工具。无论你是React新手还是有经验的Web开发者,都能通过本文快速上手React Nativ

gitblog_00952的博客 538

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

《React Native 精解与实战》书籍连载「React 与 React Native 简介」

此文是我的出版书籍《React Native 精解与实战》连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理、React Native 组件布局、组件与 API 的介绍与代码实战,以及 React Native 与 iOS、Android 平台的混合开发底层原理讲解与代码实战演示,精选了大量实例代码,方便读者快速学习。 书籍还配套了视频教程「80 节实战课精通...

DevOpenClub 专栏 522

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

React Native笔记

React Native 是由 Meta(原 Facebook)开源的跨平台移动应用开发框架,基于 React 和 JavaScript,允许开发者使用同一套代码库构建 iOS 和 Android 原生应用。对于追求 开发效率、代码复用 和 接近原生体验 的团队,它是理想选择。支持 iOS、Android、Web(通过 React Native for Web)甚至桌面端(如 Windows/macOS)。性能提升:启动时间减少 40%,内存占用降低 25%,支持同步原生操作(如文件读写)。

zxz86的博客 1134

graphile-build-pg 版本演进全解析:从 5.0.0-alpha 到 5.1.3 的 API 重构、行为系统与插件生态

`graphile-build-pg` 是 Graphile Crystal 仓库(Grafast、PostGraphile、pg-introspection、pg-sql2 等项目的集合)中负责「将 PostgreSQL 数据库反射为 GraphQL schema」的核心插件集合。本文以其完整 CHANGELOG 为主体,系统梳理从 5.0.0 早期 alpha 到当前 5.1.3 的版本演进脉

gitblog_01074的博客 946

12.React Native数据本地存储;

目录 1.数据本地存储介绍 目录 1.数据本地存储介绍 2.AsyncStorage使用 2.1react-native-storage 2.2添加库几种方式 2.3引入react-native-storage库 2.4.保存、修改和删除数据操作 2.5使用key和id来保存数据,一般是保存同类别(key)的大量数据。 3.过期数据处理(sync属性设置) 3.1定义s...

Tiger的专栏 1万+

react-native-file-access:React Native 的文件系统访问解决方案

react-native-file-access:React Native 的文件系统访问解决方案 项目介绍 在现代移动应用开发中,对本地文件系统的访问是基础且必要的需求。react-native-file-access 是一个为 React Native 提供文件系统访问功能的库。它支持将网络请求直接保存到文件系统,并且兼容 Android 的作用域存储(scoped storage),这对于目...

gitblog_00982的博客 1097

【亲测免费】 React Native 文件系统管理库 (react-native-fs) 教程

React Native FS 是一个用于 React Native 应用程序的文件系统操作扩展库。它提供了广泛的文件系统接口,包括读写文件、移动文件或目录、下载和上传文件等。开发者可以利用这个库来处理应用程序中的本地存储需求,如保存用户数据、缓存远程资源或者执行复杂的文件操作。 ## 2. 项目快速启动 ### 安装 首先,你需要在你的 React Native 项目中安装 `react-...

gitblog_00454的博客 1198

React Native鸿蒙:DeviceInfo应用版本读取

DeviceInfo是React Native的核心工具模块,提供跨平台的设备信息获取能力。在OpenHarmony环境下,其版本读取功能通过桥接层实现原生接口调用。本文详细解析了React Native DeviceInfo模块在OpenHarmony 6.0.0平台获取应用版本的完整流程。通过桥接层设计、异步调用机制和配置解析的三层架构,实现了与Android/iOS平台一致的API体验。开发者需特别注意鸿蒙平台的权限声明要求和平板设备的类型兼容问题。动态版本更新:探索热更新场景的实时版本同步。

摘星编程的博客 5945

12.React Native文件创建、查看、下载、上传-react-native-fs

目录 1.react-native-fs是什么? 2.react-native-fs支持哪些功能? 3.react-native-fs如何使用? 4.react-native-fs功能介绍? 5.文件操作说明 5.1文件目录说明 5.2文件创建 5.3文件删除 5.4文件读取 5.5文件上传(支持IOS和Android) 5.6文件修改 5.7文件移动和复制 5.8文件是...

Tiger的专栏 1万+

React Native 重大更新

10 月 23 日,React Native 发布了 0.76 版本!该版本带来了许多重要的更新,包括等。下面就来看看该版本的主要更新内容,以及新架构的简介。

lsq191690的博客 1945

终极指南:React Native文件系统操作神器react-native-fs详解

🚀 想要在React Native应用中轻松管理文件系统吗?react-native-fs就是你的最佳选择!这个强大的跨平台文件系统解决方案为移动应用开发提供了完整的文件操作能力,让iOS和Android平台的文件管理变得前所未有的简单。无论是读取文档、下载文件,还是备份数据,react-native-fs都能帮你搞定! ## ✨ 为什么选择react-native-fs? react-na

gitblog_01189的博客 771

React Native图片缓存react-native-img-cache:测试与调试终极指南

想要为你的React Native应用打造流畅的图片加载体验吗?react-native-img-cache库正是你需要的终极解决方案!这个强大的图片缓存工具能够显著提升应用性能,减少网络请求,为用户带来丝滑的视觉体验。在本篇完整的测试与调试指南中,我们将深入探讨如何有效测试和调试react-native-img-cache,确保你的图片缓存功能稳定可靠。 ## 🚀 为什么需要专业的测试与调试

gitblog_01154的博客 951

如何在React Native中集成react-native-cookies:从安装到使用的快速入门

react-native-cookies是一个专为React Native开发的Cookie管理工具,能帮助开发者轻松处理应用中的Cookie存储、读取和清除等操作,让React Native应用的Cookie管理变得简单高效。 ## 一、快速了解react-native-cookies react-native-cookies是一款专注于React Native平台的Cookie管理库,它提

gitblog_00322的博客 516
上一篇: 基于vue+ionic+capacitor的图书借阅app
下一篇: 基于vue2+element+springboot+mybatis+jpa+mysql的小区物业管理系统
西山水壶
西山水壶 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄18年 5010粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西山水壶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值