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

如何在APP中检测OTG状态并提示用户开启OTG?

检测OTG状态并提示开启(适配realme/OPPO机型)

一、基础检测方案:通过UsbManager判断

大部分Android机型可借助系统UsbManager的API判断USB设备连接状态,在ColorOS(realme/OPPO基于该系统)中,OTG关闭时getDeviceList()会返回空列表,可结合这一点做基础判断:

UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();

if (deviceList.isEmpty()) {
    // 无USB设备,可能是OTG未开启或未连接设备
    boolean isOtgEnabled = isOtgFunctionEnabled(this);
    if (!isOtgEnabled) {
        showOtgEnablePrompt();
    }
}

二、针对ColorOS的OTG状态检测

realme/OPPO的OTG状态可通过以下两种方式判断:

方法1:读取系统属性

ColorOS通过sys.usb.state属性标识USB状态,OTG开启且连接设备时属性值为otg,关闭时为none或其他值。注意读取该属性需要android.permission.READ_PRIVILEGED_PHONE_STATE权限,普通APP若无法获取权限,优先使用方法2。

方法2:监听USB状态广播

注册android.hardware.usb.action.USB_STATE广播,通过广播携带的字段判断USB连接状态:

private BroadcastReceiver usbStateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        boolean isUsbConnected = intent.getBooleanExtra("connected", false);
        boolean isUsbConfigured = intent.getBooleanExtra("configured", false);
        
        if (!isUsbConnected && !isUsbConfigured) {
            checkAndPromptOtg();
        }
    }
};

// 注册广播
IntentFilter filter = new IntentFilter("android.hardware.usb.action.USB_STATE");
registerReceiver(usbStateReceiver, filter);

三、引导用户开启OTG

检测到OTG关闭时,可弹出对话框提示用户并跳转至设置页面:

private void showOtgEnablePrompt() {
    new AlertDialog.Builder(this)
        .setTitle("提示")
        .setMessage("请开启OTG功能以连接外部设备")
        .setPositiveButton("去开启", (dialog, which) -> {
            // 跳转至OTG设置页面
            Intent intent = new Intent("android.settings.USB_SETTINGS");
            startActivity(intent);
        })
        .setNegativeButton("取消", null)
        .show();
}

补充说明

  • 若上述跳转无效,可尝试直接跳转到「其他设置」页面:
Intent intent = new Intent("com.android.settings.action.SETTINGS");
intent.putExtra(":android:show_fragment", "com.android.settings.deviceinfo.UsbSettings");
startActivity(intent);
  • 需在Manifest中声明USB权限:
<uses-permission android:name="android.permission.USB_PERMISSION" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:24