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

时间:2015-06-24 04:50:00

标签: java android reflection android-permissions android-usb

我试图一遍又一遍地搜索,并且不知道我们是否可以控制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);

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

提前致谢。

2 个答案:

答案 0 :(得分:3)

您的问题的简短回答是。您无法以编程方式使用USB海量存储权限。您也找不到任何可以为任何/所有手机可靠地执行此操作的Android应用程序。

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

您尝试使用的方法假定我们知道相关方法的名称并通过反射调用它们。这适用于已修改基本框架并暴露相关API调用的某些OEM。但它假设您知道这些方法的名称,并且它只适用于大量Android手机型号的一小部分。它不适用于大多数手机,它肯定不适用于任何拥有原始Android操作系统源代码的Nexus设备。

就是这样。

答案 1 :(得分:1)

如果您的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?!