2011-05-02 13 views

Respuesta

55

Puede obtener la ruta de sdcard del este código:

File extStore = Environment.getExternalStorageDirectory(); 

continuación, especifique el nombre de carpeta y nombre de archivo

por ejemplo:

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

Hay un almacenamiento buildin que es/storage/sdcard0 y una tarjeta SD que es/storage/sdcard1 en mi teléfono (ejecutando android 4.1.2.) El Environment.getExternalStorageDirectory(). getAbsolutePath() return/storage/sdcard0. ¿Hay alguna forma de obtener la ruta de la tarjeta SD que es/storage/sdcard1? ¿Código difícil? – rml

+6

Environment.getExternalStorageDirectory() devuelve "/ storage/emulated/0", mientras que mi tarjeta SD realmente vive en "/ storage/extSdCard /" – joshgoldeneagle

3

Al utilizar el siguiente código que pueda encontrar nombre, ruta, tamaño como este todo tipo de información de todos los archivos de canciones 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()); 
0

tal vez tenga el mismo problema que yo, mi tableta tiene una tarjeta SD, en/mnt/sdcard y la tarjeta sd externa está en/mnt/extcard, puede buscarla en el administrador de archivos de Android, ir a su tarjeta sd y ver el camino hacia ella.

Espero que ayude.

12

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

En realidad, en algunos dispositivos nombre predeterminado sdcard externa está mostrando como extSdCard y para otros es sdcard1. Este fragmento de código ayuda a descubrir que la ruta exacta y ayuda a que retrive el camino de 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); 
} 
+1

Buena solución, ¿estos son todos los posibles nombres para la tarjeta sd? –

+1

@SamvelKartashyan ¡Claro que no! :) Por ejemplo, teníamos un dispositivo donde la tarjeta SD estaba montada en '"/storage/ext_sd/"', y otra donde está en "/ mnt/sdcard /" – Antonio

9

Environment.getExternalStorageDirectory() se NO camino de retorno a tarjeta de almacenamiento SD micro.

cómo obtener la ruta del archivo de la tarjeta SD en Android

Por tarjeta SD, estoy asumiendo que usted significó tarjeta SD extraíble micro.

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

Android 4.4 es el primer lanzamiento de la plataforma que ha permitido que las aplicaciones usen tarjetas SD para el almacenamiento. Cualquier acceso a tarjetas SD antes del API nivel 19 se realizó a través de API privadas no compatibles.

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

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

Pero tenga en cuenta que,

de almacenamiento compartido no siempre puede estar disponible, ya que los medios extraíbles pueden ser expulsados ​​por el usuario. El estado del medio se puede verificar usando getExternalStorageState(File).

No se aplica seguridad con estos archivos. Por ejemplo, cualquier aplicación que contenga WRITE_EXTERNAL_STORAGE puede escribir en estos archivos.

El interna y externa de almacenamiento terminología según Google/Android documentos oficiales es bastante diferente de lo que pensamos.

1

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

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

Felicitaciones a paresh996 por dar con la respuesta en sí misma, y ​​puedo atestiguar que probé con Samsung S7 y S7edge y parece que funciona.

Ahora, necesitaba un método que devolviera una ruta válida donde leer archivos, y que considerara el hecho de que podría no haber una tarjeta SD externa, en cuyo caso debería devolverse el almacenamiento interno, 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(); 
} 
Cuestiones relacionadas