2011-09-13 77 views
13

在許多Android設備上,當設備插入計算機的USB端口或甚至在某些USB充電設備上時,手機會進入USB存儲模式。當設備處於此模式時,android應用程序無法訪問sdcard。有什麼辦法(1)檢測設備何時處於此模式,以及(2)以編程方式關閉USB存儲器,至少暫時關閉,以便我的android應用程序可以訪問sdcard?以編程方式關閉Android設備上的USB存儲器

我看過其他的SO問題,答案不夠真實 (例如,Android: Detecting USB)。

+0

+1好問題 –

+0

這可以工作,如果電話是根植的,並且當前的操作系統已經獲得了所需的API權限訪問 – Prateek

+0

像尼古拉說的,除非你只支持pre - 蜂窩設備,這是不值得努力,使UMS切換功能。 MTP雖然很多人可能不喜歡它(包括我自己),但確實有其優點。例如,通過MTP,您可以通過計算機或設備同時從手機中刪除文件,並查看計算機和設備中立即反映的更改。使用UMS,每次需要在設備和計算機之間切換使用情況時,您必須安裝/卸除該設備。所以MTP爲您提供更多的靈活性。 – ChuongPham

回答

3

您可以檢測到它(您有鏈接),但是AFAIK不能通過公共SDK API來掛載/卸載USB存儲。在Honeycomb(3.0及以上版本)中,USB海量存儲不再用於訪問設備的外部存儲,因此您的應用和計算機可以同時訪問它。

+1

正確,您無法安裝或卸載USB,除非您的應用程序是固件的一部分。 – CommonsWare

5

A1:如果SD卡當前狀態爲SHARED這意味着它已經連接到MSC模式PC,你可以檢查此情況如下:

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

那麼如何訪問這些apis? – 2012-10-04 21:14:09

0

它通過在storageManger api上使用反射來阻止大容量存儲。 Storage Manager API可從sdk級別-9獲得。

我無法反映可以鎖定較低操作系統級別的Mountservice api。如果任何人已經做到了,請給點建議

+0

歡迎來到Stack Exchange。你不應該添加評論或問題作爲答案,他們很可能會被刪除。 如果您有問題,請提問,但請務必先閱讀[如何提問](http://stackoverflow.com/questions/how-to-ask)。 要批評或要求作者澄清,一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation),在他們的帖子下留下評論。 刪除的帖子可能會導致不良後果[我們不再接受此帳戶的問題/答案](http://meta.stackexchange.com/q/86997/201151) – bummi

相關問題