¿Cómo crear archivos / carpetas en almacenamiento externo accesibles a través de USB?

Estoy usando un Nexus 5 como dispositivo de prueba para mi primera aplicación de Android. Cuando conecto el teléfono a mi PC vía USB, aparece en el explorador y puedo acceder a diferentes archivos y carpetas en los dispositivos (como si el dispositivo fuera una memoria USB …).

Pensé que estos archivos y carpetas representarían el External Storage y cada archivo / carpeta que mi almacén de la aplicación en External Storage sería accesible vía USB también.

Mientras que la creación de archivos / carpeta en el External Storage en mi aplicación no es un problema, estos archivos no son visibles en los archivos y carpetas que se pueden acceder a través de USB:

 public static File getAppPuplicExternalStorageDir() { File appDir = null; try { appDir = new File(Environment.getExternalStorageDirectory(), "MyApp"); appDir.mkdirs(); } catch (Exception e) { } return appDir; } ... File noMediaFile = new File(getAppPuplicExternalStorageDir(), ".nomedia"); noMediaFile.createNewFile(); ... 

Este código funciona perfectamente. Puedo probar si el archivo existe, eliminar el archivo, crear otros archivos, etc, sin ningún problema.

Cuando compruebo el appDir tiene la ruta de acceso /storage/emulated/0/MyApp/ . Todo funciona bien, excepto que esta carpeta no es visible a través de USB.

¿Hay alguna diferencia entre el almacenamiento externo y los archivos / carpeta que son visibel vía USB? El usuario debe poder descargar los archivos a su PC. ¿Cómo puedo hacer que mis archivos sean visibles a través de USB?

estos archivos no son visibles en los archivos y carpetas que se pueden acceder a través de USB

Serán, una vez que MediaScannerConnection haya indexado. Puede utilizar scanFile() en MediaScannerConnection para que esto suceda más rápido.

También tenga en cuenta que el usuario puede necesitar usar una opción de "refrescar" o "recargar" en su cliente MTP (por ejemplo, el Explorador de Windows) para ver los archivos, o incluso desenchufar / volver a conectar el dispositivo, ya que algunos clientes MTP caché lista de directorios.

Cuando compruebo el appDir tiene la ruta de acceso / storage / emulated / 0 / MyApp /. Todo funciona bien, excepto que esta carpeta no es visible a través de USB.

Eso sería un directorio MyApp/ bajo la raíz del almacenamiento externo, al menos para los teléfonos. Para tablets con usuarios secundarios, el directorio MyApp/ estará visible para el usuario cuando el usuario haya iniciado sesión en la tableta. El camino de storage/emulated/0/ es dinámico, para que el código de la aplicación se escriba en el lugar correcto.

Además, intenta no usar getExternalStorageDirectory() y desordenar el almacenamiento externo del usuario. Si se trata de archivos que el usuario debe manipular, intente colocarlos en una ubicación especificada por Environment.getExternalStoragePublicDirectory() .

  • Máximo amperaje de salida de los Smartphones USB
  • Android USB OTG: por programación, apague la alimentación del puerto
  • Aparato de almacenamiento masivo USB Android
  • USB_DEVICE_ATTACHED sólo iniciaActividad de Galaxy S3 ICS
  • Los controladores usb para adb no funcionan para Motorola mc40
  • No puedo conectar Nexus S a mi Mac OS x Lion 10.7 para depuración USB
  • La diferencia entre vold y udevd
  • Ruta de acceso de OTG en dispositivo Android
  • Android Tablet no puede encontrar el dispositivo USB a través de puerto USB, pero puede a través de OTG cable
  • Android 5.0 Lollipop - Reinicio de Nexus 10 y depuración USB no detectada?
  • Eclipse Android SDK no puede ver el nuevo dispositivo Samsung Galaxy S4 a través de una conexión USB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.