Android: обнаружение USB

Есть ли способ узнать (программно) в своей деятельности / приложении, что пользователь подключил ваш телефон к ПК через USB?

Solutions Collecting From Web of "Android: обнаружение USB"

Некоторые люди предложили использовать UMS_CONNECTED который устарел по UMS_CONNECTED с последней версией Android. Другая проблема заключается в том, что он не работает с устройствами с поддержкой MTP

Другие предложили использовать BatteryManager , точнее ACTION_BATTERY_CHANGED а также BATTERY_PLUGGED_AC и BATTERY_PLUGGED_USB Это идеально, если вы хотите обнаружить состояние батареи или зарядки устройства, но не очень хороший индикатор подключения USB. Использование менеджера батарей связано с отказом на старых планшетах для Android, таких как XOOM, вкладка ICONIA A510 и более старые планшеты Asus.

Чтобы убедиться в том, что устройство подключено к ПК, вы можете: Использовать android.hardware.usb.action.USB_STATE и connected вместо элементов BatteryManager

Образец кода

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

Надеюсь это поможет

Был способен обнаруживать USB-соединение, регистрируя широковещательный приемник, следуя,

 IntentFilter mIntentFilter = новый IntentFilter (Intent.ACTION_UMS_CONNECTED);

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

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")) {...} } 

Если все, что вы хотите сделать, это определить, имеете ли вы доступ к 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; } } 

Основная проблема при проверке 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_AC и BATTERY_PLUGGED_USB

Поэтому с этой трансляцией вы можете узнать, подключен ли к смартфону USB, даже если он использует протокол MTP.

Чтобы узнать, отключен ли смартфон, вам нужно проверить, EXTRA_PLUGGED значение BATTERY_PLUGGED_USB с BATTERY_PLUGGED_USB на 0