Cómo obtener la ruta del archivo desde la tarjeta sd en android

Hola todos tengo archivos mp3 en la tarjeta SD. Cómo obtener la ruta del archivo de la canción mp3 de la tarjeta SD.

Por favor ayúdame

Puede obtener la ruta de acceso de sdcard desde este código:

File extStore = Environment.getExternalStorageDirectory(); 

A continuación, especifique el nombre de la carpeta y el nombre del archivo

Por ejemplo:

 "/LazyList/"+serialno.get(position).trim()+".jpg" 

Este código ayuda a conseguirlo fácilmente …………

En realidad, en algunos dispositivos el nombre predeterminado de sdcard externo se muestra como extSdCard y para otros es sdcard1. Este fragmento de código ayuda a encontrar esa ruta exacta y ayuda a recuperar la ruta del dispositivo externo.

 String sdpath,sd1path,usbdiskpath,sd0path; if(new File("/storage/extSdCard/").exists()) { sdpath="/storage/extSdCard/"; Log.i("Sd Cardext Path",sdpath); } if(new File("/storage/sdcard1/").exists()) { sd1path="/storage/sdcard1/"; Log.i("Sd Card1 Path",sd1path); } if(new File("/storage/usbcard1/").exists()) { usbdiskpath="/storage/usbcard1/"; Log.i("USB Path",usbdiskpath); } if(new File("/storage/sdcard0/").exists()) { sd0path="/storage/sdcard0/"; Log.i("Sd Card0 Path",sd0path); } 

Environment.getExternalStorageDirectory() NO devolverá la ruta al almacenamiento de tarjetas micro SD .

Cómo obtener la ruta del archivo desde la tarjeta sd en android

Por la tarjeta del SD , estoy asumiendo que, usted significó la tarjeta desprendible del micro SD .

En API de nivel 19, es decir, en la versión 4.4 de Android Kitkat, han añadido File[] getExternalFilesDirs (String type) en Context Class que permite a las aplicaciones almacenar datos / archivos en tarjetas micro SD.

Android 4.4 es la primera versión de la plataforma que ha permitido que las aplicaciones usen tarjetas SD para almacenamiento. Cualquier acceso a las tarjetas SD antes del nivel 19 de la API era a través de APIs privadas no compatibles.

Environment.getExternalStorageDirectory() estaba allí desde el nivel 1 de la API

GetExternalFilesDirs (String type) devuelve rutas absolutas a los directorios específicos de la aplicación en todos los dispositivos de almacenamiento compartido / externo. Significa que devolverá rutas a la memoria interna y externa. Generalmente, la segunda ruta devuelta sería la ruta de almacenamiento para la tarjeta microSD (si la hay).

Pero tenga en cuenta que,

Es posible que el almacenamiento compartido no siempre esté disponible, ya que los medios extraíbles pueden ser expulsados ​​por el usuario. El estado del medio se puede comprobar utilizando getExternalStorageState(File) .

No hay seguridad reforzada con estos archivos. Por ejemplo, cualquier aplicación que WRITE_EXTERNAL_STORAGE puede escribir en estos archivos.

La terminología de almacenamiento interno y externo según Google / documentos oficiales de Android es muy diferente de lo que pensamos.

Si quieres saber más sobre la diferencia de terminología, classes y methods para guardar archivos en almacenamiento interno y externo, rutas de almacenamiento, escribí un largo post sobre la documentación de stackoverflow con una explicación clara. Puedes consultarlo aquí: Almacenamiento interno y externo en Android

Mediante el uso del siguiente código puede encontrar el nombre, la ruta de acceso, el tamaño como este todo tipo de información de todos los archivos de música de audio

 String[] STAR = { "*" }; Uri allaudiosong = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; String audioselection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; Cursor cursor; cursor = managedQuery(allaudiosong, STAR, audioselection, null, null); if (cursor != null) { if (cursor.moveToFirst()) { do { String song_name = cursor .getString(cursor .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); System.out.println("Audio Song Name= "+song_name); int song_id = cursor.getInt(cursor .getColumnIndex(MediaStore.Audio.Media._ID)); System.out.println("Audio Song ID= "+song_id); String fullpath = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); System.out.println("Audio Song FullPath= "+fullpath); String album_name = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM)); System.out.println("Audio Album Name= "+album_name); int album_id = cursor.getInt(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)); System.out.println("Audio Album Id= "+album_id); String artist_name = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST)); System.out.println("Audio Artist Name= "+artist_name); int artist_id = cursor.getInt(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST_ID)); System.out.println("Audio Artist ID= "+artist_id); } while (cursor.moveToNext()); 

Tal vez usted está teniendo el mismo problema que tuve, mi tableta tiene una tarjeta SD en él, en / mnt / sdcard y la tarjeta externa sd estaba en / mnt / extcard, puede mirar en el gestor de archivos de Android, yendo a su sd Tarjeta y ver el camino a ella.

Espero eso ayude.

Como algunas personas indicaron, la respuesta oficialmente aceptada no devuelve la tarjeta externa extraíble SD. Y corrí sobre el siguiente hilo que propone un método que he probado en algunos dispositivos Android y parece funcionar con fiabilidad, por lo que pensé en volver a compartir aquí como no lo veo en las otras respuestas:

http://forums.androidcentral.com/samsung-galaxy-s7/668364-whats-external-sdcard-path.html

Felicidades a paresh996 por llegar con la respuesta en sí, y puedo atestiguar que he probado en Samsung S7 y S7edge y parece funcionar.

Ahora, necesitaba un método que devolviera una ruta válida donde leer los archivos, y que consideraba el hecho de que podría no haber un SD externo, en cuyo caso el almacenamiento interno debería ser devuelto, así que modifiqué el código de paresh996 a esto:

 File getStoragePath() { String removableStoragePath; File fileList[] = new File("/storage/").listFiles(); for (File file : fileList) { if(!file.getAbsolutePath().equalsIgnoreCase(Environment.getExternalStorageDirectory().getAbsolutePath()) && file.isDirectory() && file.canRead()) { return file; } } return Environment.getExternalStorageDirectory(); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.