How to detect USB connection via application?

9

Is it possible for me to detect a USB connection in my Android application and how do I do this?

I have a sync menu that is performed via USB and FTP, however I want to leave the USB option accessible only when the device is connected to the PC via USB.

I saw something about USBManager, but found nothing that could help me.

    
asked by anonymous 29.12.2014 / 15:11

2 answers

4

In Activity that has this menu do the following:

Declare a class derived from BroadcastReceiver

public class UsbDeviceDetect extends BroadcastReceiver { 

    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_CONNECTED")) {

                //Aqui torne enable o seu item de menu
        }
        if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_DISCONNECTED")) {

                //Aqui torne disable o seu item menu
        }
    } 
}

Declare two attributes, one for BroadcastReceiver and one for IntentFilter

private UsbDeviceDetect usbDeviceDetect;
private IntentFilter filter;

In the onCreate method, create an instance of BroadcastReceiver and its IntentFilter

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ----------
    UsbDeviceDetect usbDeviceDetect = new UsbDeviceDetect();
    filter = new IntentFilter();
    filter.addAction("android.intent.action.UMS_CONNECTED");
    filter.addAction("android.intent.action.UMS_DISCONNECTED");

}

In method onResume register BroadcastReceiver

@Override
protected void onResume(){
    super.onResume();

    registerReceiver(usbDeviceDetect, filter));
}

In the onPause method, do unregister of BroadcastReceiver

@Override
protected void onPause() {

    unregisterReceiver(usbDeviceDetect);

    super.onPause();
}  
    
29.12.2014 / 15:47
4

I think what you want is in this answer in the OS:

<receiver android:name=".DetactUSB">
   <intent-filter>
        <action android:name="android.intent.action.UMS_CONNECTED" />
        <action android:name="android.intent.action.UMS_DISCONNECTED" />
   </intent-filter>
</receiver>

Code:

public class DetactUSB extends BroadcastReceiver { 
    private static final String TAG = "DetactUSB";
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_CONNECTED")) {
                TextView textView = new TextView(context);
                textView.setBackgroundColor(Color.MAGENTA);
                textView.setTextColor(Color.BLUE);
                textView.setPadding(10,10,10,10);
                textView.setText("USB connected……….");
                Toast toastView = new Toast(context);
                toastView.setDuration(Toast.LENGTH_LONG);
                toastView.setGravity(Gravity.CENTER, 0,0);
                toastView.setView(textView);
                toastView.show();
                Log.i(TAG,"USB connected..");
        }
        if (intent.getAction().equalsIgnoreCase( "android.intent.action.UMS_DISCONNECTED")) {
                TextView textView = new TextView(context);
                textView.setBackgroundColor(Color.MAGENTA);
                textView.setTextColor(Color.BLUE);
                textView.setPadding(10,10,10,10);
                textView.setText("USB Disconnected……….");
                Toast toastView = new Toast(context);
                toastView.setDuration(Toast.LENGTH_LONG);
                toastView.setGravity(Gravity.CENTER, 0,0);
                toastView.setView(textView);
                toastView.show();
        }
    } 
}

If this is not exactly what you want maybe you can make an adaptation to use another action as this another answer in OS:

<intent-filter>
    <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>

Documentation .

    
29.12.2014 / 15:24