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

如何在Android 10+(API 29+)中以编程方式检测USB大容量存储是否启用?

在Android API 29+中检测USB大容量存储状态

问题原因

你之前使用的Settings.Global#USB_MASS_STORAGE_ENABLED在API 29+已经不再准确——Android 10及以后的USB存储管理逻辑发生了变化,这个常量的状态不再随实际USB模式更新,因此会始终返回"1"。

正确检测方案

API 29+需通过UsbManager提供的API获取当前USB功能状态,具体步骤如下:

  1. 添加权限
    在AndroidManifest.xml中声明USB状态访问权限(普通权限,无需动态申请):
<uses-permission android:name="android.permission.ACCESS_USB_STATE" />
  1. 编写检测代码
    通过UsbManager获取当前启用的USB功能集合,判断是否包含大容量存储功能:
import android.content.Context;
import android.hardware.usb.UsbManager;

// 获取UsbManager实例
UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
// 获取当前启用的USB功能标识
int currentUsbFunctions = usbManager.getCurrentUsbFunctions();
// 判断是否启用了USB大容量存储
boolean isMassStorageEnabled = (currentUsbFunctions & UsbManager.FUNCTION_MASS_STORAGE) != 0;

关键说明

  • UsbManager.FUNCTION_MASS_STORAGE对应传统的USB大容量存储(UMS)模式。
  • 当设备未连接USB、连接后设置为“无数据传输”模式时,currentUsbFunctions会返回0或不包含该功能标识,此时isMassStorageEnabled为false。
  • 部分现代Android设备已移除传统UMS模式,转而默认使用MTP(文件传输),这类设备可能永远不会触发FUNCTION_MASS_STORAGE,需结合设备实际支持情况测试。

测试方法

  1. 将设备连接到电脑,在系统下拉菜单中切换USB模式为“大容量存储”(若设备支持),此时检测结果应为true。
  2. 切换为“无数据传输”模式,或断开USB连接,检测结果应为false。
  3. 若设备默认USB模式设为“无数据传输”,即使连接USB,检测结果也会是false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:30:51