Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Detect USB flash drive plugged in

Is there a way to detect when a USB flash drive is plugged into an Android device? I'm able to detect an SD card using a broadcast receiver, but it doesn't work for USB. I'd like to avoid polling.

code to register receiver:

private void RegisterUpdateReceiver()
{
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.intent.action.MEDIA_MOUNTED");
    intentFilter.addDataScheme("file");
    myReceiver = new MyReceiver();
    this.registerReceiver(myReceiver, intentFilter);
}

receiver code:

public class MyReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();
        if (action.equals("android.intent.action.MEDIA_MOUNTED")) 
        {
            // react to event
        }
}
like image 795
Ravi Avatar asked Nov 11 '11 00:11

Ravi


3 Answers

If detecting attaching and detaching the USB will work "android.hardware.usb.action.USB_DEVICE_ATTACHED" can be used. Make sure the definition of the receiver and the intent filter is added in the manifest as well.

like image 198
Malaka Avatar answered Sep 23 '22 08:09

Malaka


Android, at the SDK level, has no concept of USB drives. There are no rules for where they should be mounted, broadcasts for when they appear/disappear, etc. Perhaps some standardization in this area will come in future Android releases, but it is not there today.

like image 27
CommonsWare Avatar answered Sep 23 '22 08:09

CommonsWare


This is the xml version of the receiver in the AndroidManifest.xml:

        <receiver
            android:name="MyMountBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <action android:name="android.intent.action.MEDIA_UNMOUNTED"/>
                <data android:scheme="file" />
            </intent-filter>

        </receiver>
like image 36
OneWorld Avatar answered Sep 22 '22 08:09

OneWorld