You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native如何检测USB调试模式并在开启时限制应用使用

React Native 检测USB调试模式并限制应用使用

核心说明

React Native本身没有提供检测USB调试的原生API,需要针对Android平台编写自定义原生模块实现功能;iOS平台不存在USB调试模式,无需做对应处理。

Android 平台实现步骤

1. 编写原生检测模块

在Android项目的src/main/java/[你的应用包名]/目录下创建USBDebugModule.java文件:

package com.yourappnamespace;

import android.provider.Settings;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;

public class USBDebugModule extends ReactContextBaseJavaModule {
    public USBDebugModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

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

    @ReactMethod
    public void checkUSBDebugStatus(Callback callback) {
        int adbStatus = Settings.Secure.getInt(
            getReactApplicationContext().getContentResolver(),
            Settings.Secure.ADB_ENABLED,
            0
        );
        callback.invoke(adbStatus == 1);
    }
}

2. 注册原生模块

创建USBDebugPackage.java文件用于注册模块:

package com.yourappnamespace;

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;

public class USBDebugPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new USBDebugModule(reactContext));
        return modules;
    }

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

3. 在应用入口添加模块

修改MainApplication.java的getPackages方法,将自定义包加入列表:

@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    packages.add(new USBDebugPackage()); // 加入自定义模块包
    return packages;
}

4. React Native 端调用与处理

在RN业务组件中调用原生方法,根据结果限制应用使用:

import { NativeModules, Alert, BackHandler, useEffect } from 'react-native';

const { USBDebugModule } = NativeModules;

useEffect(() => {
    checkDebugStatus();
}, []);

const checkDebugStatus = () => {
    USBDebugModule.checkUSBDebugStatus((isEnabled) => {
        if (isEnabled) {
            Alert.alert(
                '应用限制',
                'USB调试模式已开启,无法使用本应用,请关闭后重试',
                [
                    {
                        text: '立即退出',
                        onPress: () => BackHandler.exitApp(),
                        style: 'destructive'
                    }
                ],
                { cancelable: false }
            );
        }
    });
};

补充说明

  • 检测Settings.Secure.ADB_ENABLED无需额外申请系统权限,系统允许读取该状态值。
  • 若需要引导用户跳转到开发者设置页面,可额外实现打开设置的原生方法,逻辑与上述模块编写方式一致。

内容的提问来源于stack exchange,提问作者Randel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:22:38