在Android设备上编程实现关闭USB存储功能

16

在许多Android设备上,当设备插入计算机的USB端口或某些USB充电设备时,手机会进入USB存储模式。设备处于此模式时,Android应用程序无法访问SD卡。有没有办法(1)检测设备何时处于此模式并(2)编程方式关闭USB存储器,至少是暂时地,以便我的Android应用程序可以访问SD卡?

我看到过其他SO问题,答案并不真正足够(例如,Android:检测USB)。


如果手机已经被root,并且当前操作系统拥有必需的API权限,则该方法可以奏效。 - Prateek
就像Nikolay在下面所说的那样,除非你只支持Honeycomb之前的设备,否则制作UMS切换功能是不值得的。虽然许多人(包括我自己)可能不喜欢MTP,但它确实有其优点。例如,使用MTP,您可以通过计算机或设备同时从手机中删除文件,并立即在计算机和设备中看到更改的反映。而使用UMS,则需要每次在设备和计算机之间切换使用时进行挂载/卸载。因此,MTP为您提供了更多的灵活性。 - ChuongPham
2个回答

7

A1:如果SD卡的当前状态为SHARED,这意味着它已经连接到PC以MSC模式进行连接。您可以按照以下步骤检查此情况:

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

A2:您可以通过调用以下方法来强制关闭USB大容量存储连接:

MountService.setUsbMassStorageEnabled(false);

或者

StorageManager.disableUsbMassStorage();

很不幸,这两个API都无法公开访问。

6
那么如何访问这些API呢? - user517491

4

你可以检测到它(因为你有链接),但据我所知,至少不能用公共SDK API挂载/卸载USB存储。在蜂巢(3.0及以上版本)中,不再使用USB大容量存储器来访问设备的外部存储,因此你的应用程序和电脑可以同时访问它。


2
正确,除非您的应用程序是固件的一部分,否则您无法挂载或卸载USB。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接