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

Android中如何编程检测USB连接类型(充电/MTP/PTP等模式)

编程检测Android设备USB连接类型的实现方案

完全可以实现,仅做模式读取不需要特殊权限,也不需要ROOT适配,适配Android 4.4及以上全版本通用。

核心逻辑说明

你之前没找到对应监听事件,是因为USB模式变更的参数包含在系统广播android.hardware.usb.action.USB_STATE的附加字段里,该广播为粘性广播,USB连接状态、当前传输模式变更时都会触发,不需要额外权限即可监听。

具体实现步骤

  • 定义广播接收器处理USB状态变更
public class UsbModeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_USB_STATE.equals(intent.getAction())) {
            // USB是否已连接
            boolean isUsbConnected = intent.getBooleanExtra("connected", false);
            // 是否开启MTP模式
            boolean isMtpEnabled = intent.getBooleanExtra("mtp", false);
            // 是否开启PTP模式
            boolean isPtpEnabled = intent.getBooleanExtra("ptp", false);

            if (isUsbConnected) {
                if (isMtpEnabled) {
                    // 检测到当前为MTP模式,按需引导用户操作
                } else if (isPtpEnabled) {
                    // 检测到当前为PTP模式,按需引导用户操作
                } else {
                    // 检测到当前为仅充电模式,按需引导用户操作
                }
            }
        }
    }
}
  • 动态注册广播接收器
// 仅需在需要检测的页面注册即可,不需要静态注册
IntentFilter usbFilter = new IntentFilter(Intent.ACTION_USB_STATE);
registerReceiver(new UsbModeReceiver(), usbFilter);

兼容定制ROM的备选方案

如果部分国产定制ROM修改了广播的附加字段,可通过反射调用系统隐藏API直接读取当前USB模式,适配Android 6.0~Android 14均有效:

public String getCurrentUsbFunction(Context context) {
    UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
    try {
        Method getCurrentFunctions = UsbManager.class.getMethod("getCurrentFunctions");
        return (String) getCurrentFunctions.invoke(usbManager);
    } catch (Exception e) {
        e.printStackTrace();
    }
    // 返回值说明:返回"mtp"为MTP模式,返回"ptp"为PTP模式,返回"none"为仅充电模式
    return null;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03