Obtenga acceso al dispositivo de almacenamiento masivo USB en Android


Así que tengo este pequeño cable que se conecta a su teléfono que tiene un puerto USB en el otro lado donde se puede conectar una unidad flash, por ejemplo, como se puede ver aquí:

introduzca la descripción de la imagen aquí

Cuando enchufo una unidad flash recibo una notificación que dice:

Almacenamiento masivo USB conectado

Cuando inicie una aplicación de explorador de archivos, puedo ver que la unidad se encuentra en:

/ storage / UsbDriveA /

Y eso es genial, pero quiero para saber cómo obtener acceso a la unidad flash en mi código. Obtener acceso a la tarjeta SD es bastante fácil:

File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard.getAbsolutePath() + "/MyFiles")
directory.mkdirs();

Pero, ¿cómo harías esto en el caso de la unidad flash? Gracias de antemano! :)

Author: Tiwaz89, 2014-06-06

2 answers

En este ejemplo estoy usando el FileUtils de Apache, pero evento sin él verá la lógica utilizada para leer una unidad flash USB:

private UsbManager usbManager;
private UsbDevice clef;
ArrayList<File> images;

usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
clef = null;

if (usbManager != null)
{
    HashMap<String,UsbDevice> deviceList = usbManager.getDeviceList();
    if (deviceList != null)
    {
        Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
        while (deviceIterator.hasNext()) {
            clef = deviceIterator.next();
        }
    }
}

if (clef != null)
{
    File directory  = new File("/storage/UsbDriveA/");
    if (directory != null) {
        if (directory.canRead()) {

            images = new ArrayList<File>();
            String[] imageExtensions = {"jpg","jpeg","png","gif","JPG","JPEG","PNG","GIF"};
            Iterator<File> iterateImages = FileUtils.iterateFiles(directory, imageExtensions, true);
            while (iterateImages.hasNext()) {
                File theImage = iterateImages.next();
                if (!theImage.getName().startsWith(".", 0))
                    images.add(theImage);
            }

            // custom process / methods... not very relevant here : 
            imageIndex = 0;
            scale = 1.0f;
            countImgs = images.size();
            loadImage(imageIndex);
        }
    }
}

En mi manifiesto tengo esas líneas, aunque no estoy seguro de que sean todas obligatorias...

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
 8
Author: JBA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-21 23:08:04

No puedo probar esto, no tener tal cable yo mismo, pero mi suposición sería que puede pasar su ruta de archivo directamente en el constructor que se vería como:

File directory  = new File("/storage/UsbDriveA/");

¿has probado esto?

 3
Author: ballesta25,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-07 16:22:54