React Native安卓开发如何检测设备USB调试功能是否开启
React Native 安卓USB调试状态检测方案
以下是两种可直接落地的实现方式:
方案1:使用react-native-device-info库(最便捷)
该库是当前维护状态稳定的设备信息工具库,已内置USB调试状态检测能力,无需自行编写原生代码:
- 安装依赖
npm install react-native-device-info --save # 如使用yarn则执行:yarn add react-native-device-info - JS端调用示例
import DeviceInfo from 'react-native-device-info'; const checkUsbDebug = async () => { // 方法返回布尔值,true代表USB调试已开启 const isAdbEnabled = await DeviceInfo.isAdbEnabled(); if (isAdbEnabled) { // 此处写入你弹出提示引导用户关闭USB调试的逻辑 } } - 注意事项:该方法仅支持安卓平台,iOS调用会默认返回false,无需额外申请安卓权限。
方案2:自定义安卓原生模块实现(灵活可控)
如果不想引入额外第三方库,可以编写少量原生代码实现检测能力:
- 新建原生模块类,在安卓目录
android/app/src/main/java/[你的应用包名]/下创建UsbDebugModule.java,代码如下:package com.你的应用包名; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Promise; import android.provider.Settings; public class UsbDebugModule extends ReactContextBaseJavaModule { UsbDebugModule(ReactApplicationContext context) { super(context); } @Override public String getName() { return "UsbDebugModule"; } @ReactMethod public void isAdbEnabled(Promise promise) { try { int adbEnabled = Settings.Secure.getInt( getReactApplicationContext().getContentResolver(), Settings.Secure.ADB_ENABLED, 0 ); promise.resolve(adbEnabled == 1); } catch (Exception e) { promise.resolve(false); } } } - 注册原生模块,在同目录下创建
MyAppPackage.java,代码如下:package com.你的应用包名; 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 MyAppPackage implements ReactPackage { @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new UsbDebugModule(reactContext)); return modules; } } - 在
MainApplication.java的getPackages方法中添加你自定义的包:@Override protected List<ReactPackage> getPackages() { List<ReactPackage> packages = new PackageList(this).getPackages(); packages.add(new MyAppPackage()); // 新增该行代码 return packages; } - JS端调用示例:
import { NativeModules } from 'react-native'; const { UsbDebugModule } = NativeModules; const checkUsbDebug = async () => { const isAdbEnabled = await UsbDebugModule.isAdbEnabled(); if (isAdbEnabled) { // 写入弹出提示的业务逻辑 } }
内容的提问来源于stack exchange,提问作者Shivam
相关产品推荐
相关产品推荐

