3

我试图一遍又一遍地搜索并且很困惑我们是否可以在不植根手机的情况下控制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);

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

提前致谢。

4

2 回答 2

3

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

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

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

就这些。

于 2015-06-24T05:03:30.410 回答
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?!
于 2015-06-24T04:57:22.927 回答