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
相关产品推荐
相关产品推荐

