2011-01-05 9 views
13

Czy jest jakiś sposób, aby dowiedzieć się (programowo) w swojej działalności/aplikacji, że użytkownik podłączył swój telefon do komputera przez USB?Android: wykrywanie USB

Odpowiedz

33

Niektórzy ludzie zasugerował użycie UMS_CONNECTED która jest nieaktualna jako ostatniej wersji Androida Inny problem z tym jest że to nie działa z urządzeniami MTP włączona

Inni sugerowali zastosowanie BatteryManager dokładniej ACTION_BATTERY_CHANGED jak również BATTERY_PLUGGED_AC i BATTERY_PLUGGED_USB jest to idealne rozwiązanie, jeśli chcesz de Sprawdź stan baterii lub ładowania urządzenia, ale nie jest to naprawdę dobry wskaźnik połączenia USB. Używanie menedżera akumulatora może się nie udać na starszych tabletach z Androidem, takich jak XOOM, karta ICONIA A510 i starsze tablety Asus.

czysto wykryć, że urządzenie zostało podłączone na komputerze można: użytkowania android.hardware.usb.action.USB_STATE i connected zamiast BatteryManager rzeczy

przykładowy kod

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

Hope this helps

+0

Niejasne od dokumentacji, co to faktycznie wykrywa. W moim przypadku próbuję zdiagnozować wadliwy kabel USB, gdzie czasami stan zasilania się nie zmienia, ale USB spada i wychodzi - to drugie, co próbuję wykryć. – Michael

5

był w stanie wykryć połączenie USB poprzez zarejestrowanie odbiornika nadawane przez następujące,

 
IntentFilter mIntentFilter = new IntentFilter(Intent.ACTION_UMS_CONNECTED); 

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

+0

ja dostałem błąd w 'intentReceiver', więc możesz rozwinąć –

+0

To nie działa dla mnie. Android 2.2, urządzenie => HTC Desire –

+0

Nie działa, jeśli urządzenie używa protokołu MTP zamiast UMS (na przykład Galaxy Nexus używa protokołu MTP) – darkheir

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

To nie działa dla mnie. Android 2.2, urządzenie => HTC Desire –

+1

@Heshan pls zobacz zaktualizowaną odpowiedź. – 66CLSjY

+0

Ten kod MyReceiver nie ma nawet sensu .. a jeśli w definicji klasy? –

4

Jeśli wszystko, co chcesz do wykrywa, czy masz dostęp do sdcard, następnie następujące czynności będą działać:

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! ten kod działa, to jest to, czego potrzebuję. – Maep

3

Głównym problemem podczas sprawdzania android.intent.action.ums_connected jest to, że urządzenia korzystające z protokołu MTP (np. Samsung Nexus Galaxy) nie otrzymują tej transmisji.

Dlatego używam inny sposób wykryć, gdy Smartphone jest podłączony lub odłączony:

sprawdzić stan batery. Istnieje intencja o nazwie ACTION_BATTERY_CHANGED wywoływana, gdy zdarzenie ma miejsce na baterii. W tym celu znajdują się dodatkowe pola zawierające pewne informacje. Jednym z nich jest 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. 

Pozostałe stałe są BATTERY_PLUGGED_AC i BATTERY_PLUGGED_USB

Więc z tej audycji można wiedzieć, czy Smartphone został podłączony USB, nawet jeśli używa protokołu MTP.

Aby wiedzieć, czy Smartphone jest odłączony ty juste trzeba sprawdzić, gdy zmienia się wartość EXTRA_PLUGGED z BATTERY_PLUGGED_USB do 0

+4

To nie działa dla tabletów takich jak XOOM, gdzie moc i usb są dwoma różnymi portami. –

Powiązane problemy