2011-01-05 83 views
13

有什麼辦法在活動/應用程序中知道(以編程方式)用戶是否已通過USB將手機連接到PC?Android:檢測USB

回答

33

有人使用UMS_CONNECTED被棄用的最新版本的Android 的其他問題與建議它不與MTP功能的設備工作

其他建議選用BatteryManager的,更確切地說ACTION_BATTERY_CHANGED以及BATTERY_PLUGGED_ACBATTERY_PLUGGED_USB 這是完美的,如果你想取消檢測設備的電池或充電狀態,但不是USB連接的一個很好的指示器。 使用電池管理器很容易在老款Android平板電腦上出現故障,如XOOM,ICONIA選項卡A510和舊款華碩平板電腦。

純粹的檢測設備被插入PC可以上: 使用android.hardware.usb.action.USB_STATEconnected 到位的BatteryManager東西

代碼示例

public static boolean isConnected(Context context) { 
     intent = context.registerReceiver(null, new IntentFilter("android.hardware.usb.action.USB_STATE")); 
     return intent.getExtras().getBoolean("connected"); 
    } 

希望這有助於

+0

從文檔中不清楚這實際檢測到的內容。在我的情況下,我正在嘗試診斷有故障的USB電纜,有時電源狀態不會改變,但USB會進入和退出 - 後者是我正在嘗試檢測的內容。 – Michael 2014-05-15 20:44:47

5

之所以能夠通過下面註冊一個廣播接收器檢測到USB連接,

 
IntentFilter mIntentFilter = new IntentFilter(Intent.ACTION_UMS_CONNECTED); 

BroadcastReceiver bd = new intentReceiver(); 
registerReceiver(bd, mIntentFilter); 

+0

我'intentReceiver'出錯,所以你可以詳細說明 – 2012-02-13 06:35:57

+0

這對我不起作用。 Android 2。2,設備=> HTC Desire – 2012-04-11 03:30:55

+0

如果設備使用的是MTP協議,而不是UMS協議,則不起作用(例如Galaxy Nexus使用MTP協議) – darkheir 2012-07-19 15:32:16

5

的Manifest.xml:

<receiver android:name=".MyReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.ums_connected" /> 
    </intent-filter> 
</receiver> 

MyReceiver:

public class MyReceiver extends BroadcastReceiver{ 
if (intent.getAction().equalsIgnoreCase(
     "android.intent.action.UMS_CONNECTED")) {...} 
} 
+0

This不適合我。 Android 2.2,設備=> HTC Desire – 2012-04-11 03:29:53

+1

@Heshan請參閱更新的答案。 – 66CLSjY 2012-08-07 13:12:06

+0

這個MyReceiver代碼甚至沒有意義..如果在類定義裏面? thanx! – 2016-12-30 12:23:11

4

如果你想做的是檢測你是否有權訪問SD卡,然後以下將工作:

private boolean canWriteToFlash() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     return true; 
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     // Read only isn't good enough 
     return false; 
    } else { 
     return false; 
    } 
} 
+0

thanx!這是我需要的代碼 – Maep 2011-11-02 08:00:25

3

檢查android.intent.action.ums_connected時主要的問題是使用MTP協議的設備(如Samsung Nexus Galaxy)沒有收到此廣播。

這就是爲什麼我使用的是另一種方式,當智能手機插入或拔出來檢測:

我檢查batery狀態。當電池發生事件時,有一個叫做ACTION_BATTERY_CHANGED的意圖。在這個意圖中有一些額外的領域包含一些信息。其中之一是EXTRA_PLUGGED

Indicating whether the device is plugged in to a power source; 0 means it is on battery, other constants are different types of power sources. 

其他常數BATTERY_PLUGGED_ACBATTERY_PLUGGED_USB

所以用這個廣播,你可以知道,如果智能手機已在USB被插入,即使它使用MTP協議。

要知道,如果智能手機被拔掉你探微必須檢查時,從BATTERY_PLUGGED_USBEXTRA_PLUGGED值更改爲0

+4

這不適用於像XOOM這樣的平板電腦,其中電源和USB是兩個不同的端口 – 2012-10-24 03:21:05