是否可以通过编程方式关闭 Android 设备上的 USB 存储?

Is it possible to Turn Off USB Storage on Android Devices programatically?

我试图一遍又一遍地搜索,但我很困惑我们是否可以在不 root phone 的情况下控制 USB 存储,如果可以,那怎么办?我尝试了以下方法来启用和禁用权限,但都是徒劳的:

StorageManager storage = (StorageManager)getApplicationContext().getSystemService(STORAGE_SERVICE);
 Method method = storage.getClass().getDeclaredMethod("enableUsbMassStorage");
 method.setAccessible(true); 
 Object r = method.invoke(storage);

//And to disble mass storage:

StorageManager storage = (StorageManager) getApplicationContext().getSystemService(STORAGE_SERVICE);
Method method = storage.getClass().getDeclaredMethod("disableUsbMassStorage");
method.setAccessible(true);
Object r = method.invoke(storage);

如果有人对此有任何想法,请分享您的知识。

提前致谢。

如果当前你的Sd卡是SHARED,说明它已经以MSC模式连接到PC,你可以按如下方式检查:

String state = Environment.getExternalStorageState();
if (Environment.MEDIA_SHARED.equals(state)) {
// Sd card has connected to PC in MSC mode
}

现在您可以通过调用强制关闭 USB 大容量存储连接:

MountService.setUsbMassStorageEnabled(false);



//or



StorageManager.disableUsbMassStorage();



//but unfortunately, both these API are not public accessible?!

您问题的简短回答是。您不能以编程方式使用 USB 大容量存储权限。您也找不到任何 Android 应用程序可以在 any/all phone 秒内可靠地执行此操作。

默认情况下,Android 框架不允许第三方应用程序以编程方式绕过 USB 存储权限。 选择总是留给用户,这才是正确的做法。想想看:如果允许的话,任何第三方应用可能会滥用该权限并通过 USB 连接传输数据。

您尝试使用的方法假设我们知道相关方法的名称并通过反射调用它们。这将适用于修改了基本框架并公开相关 API 调用的某些 OEM。但它假定您知道这些方法的名称,并且它只适用于大量 Android phone 模型中的一小部分。它不会在大多数 phone 上运行,并且肯定不会在任何具有原始 Android OS 源代码的 Nexus 设备上运行。

就这些。