¿Cómo acceder a la tarjeta Micro SD externa del teléfono?

¿Alguien sabe cómo puedo obtener la tarjeta SD del teléfono?

Sé que alguien me dirá su getExternalStorageDirectory() o Environment.getExternalStoragePublicDirectory() .

Pero lamentablemente no siempre apunta a la tarjeta SD externa en todos los modelos. Por ejemplo he probado en un modelo de samsung que funciona bien, pero otro no, LG no. Y también de acuerdo con la documentación también no siempre su tarjeta SD externa.

Aquí está,

* "No se confunda por la palabra" externo "aquí.

Este directorio puede mejor ser pensado como medios / almacenamiento compartido . Es un sistema de archivos que puede contener una cantidad relativamente grande de datos y que se comparte entre todas las aplicaciones (no hace cumplir los permisos).

Tradicionalmente se trata de una tarjeta SD, pero también se puede implementar como almacenamiento incorporado en un dispositivo que es distinto del almacenamiento interno protegido y se puede montar como un sistema de archivos en un equipo ". *

En mi aplicación quiero que el usuario utilice sólo la tarjeta SD.

¿Cómo puedo superar esto?

Echa un vistazo a la respuesta por CommonsWare sobre el mismo tema https://stackoverflow.com/a/5695129/582571

Menciona que no podemos distinguir entre el almacenamiento interno incorporado del móvil y el almacenamiento externo extraíble.

Pero por la respuesta de Aleadam https://stackoverflow.com/a/6049446/582571 sólo podemos comprobar que es el almacenamiento externo es extraíble o no con la función isExternalStorageRemovable ().

Espero que tengas idea.

Puede comprobar si SDCard está disponible o no

 if (android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { //Check for the file File appFolder = new File(Environment.getExternalStorageDirectory() + File.separator + context.getString(R.string.app_name)); boolean exist = appFolder.exists(); } 

La ruta de almacenamiento extraíble es diff en dispositivo a dispositivo.
El ejemplo de la ruta extraíble son:
1. mnt / ext
2. mnt / externalsd
3. mnt / external_sd

Mi dispositivo utiliza mnt / external_sd.

Puede comprobar la ruta de acceso de su archivo desde el archivo vold.fstab.
Este archivo está en la carpeta de sistemas.
La ruta del archivo es:

"/etc/vold.fstab"

Yo estaba enfrentando el mismo problema. No sabía cómo acceder a la ubicación de la tarjeta SD externa. Estaba desarrollando una aplicación en la que tenía que acceder a la tarjeta SD externa para leer y escribir algunas cosas. He intentado diferentes métodos incluyendo las bibliotecas predefinidas de android. Estos son los métodos que he utilizado: –

Estas fueron las fallas: –

 File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File myFile = new File(path, "test.txt"); File root = Environment.getExternalStorageDirectory(); File dir = new File(root.getAbsolutePath()+"/Download"); File f = getExternalFilesDir(null); File file = new File(f,"test.txt"); 

Todos ellos estaban accediendo al almacenamiento interno "/ storage / sdcard0" o "/ storage / emulated / 0". La razón que está en el dispositivo androide la porción del almacenaje interno actúa como almacenaje externo. Así que en caso de tener un almacenamiento interno de alrededor de 16 Gb o más y hay una opción para ampliar el dispositivo con tarjeta sd, entonces esta es la única manera de adivinar para acceder a la tarjeta SD externa, ya que incluso las funciones integradas y las bibliotecas de El estudio de Android tendrá acceso al almacenamiento interno como almacenamiento externo.

Finalmente utilicé esto: –

 String extFilePath = "/storage/sdcard1/Download"; File myFile = new File(extFilePath, "test.txt"); 

Y funcionó. Así que usted ve donde las librerías / funciones predefinidas de android fallan, yo podía hacer la tarea con la secuencia simple.

Aparte de esto si desea comprobar la ruta de almacenamiento externo de su dispositivo, pruebe esto: –

 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);} 

Comprobar estos puede ayudarle a saber qué camino elegir mientras accede a la tarjeta SD externa. Espero que esto ayude a otros.

Usted puede obtener el camino como el siguiente camino …..

 File sdCardRoot = Environment.getExternalStorageDirectory(); PATH = sdCardRoot.toString(); 

Si el camino no existe, entonces usted tiene que hacer el camino por mkdir () …..

 private File getTempFile(Context context) { final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); if (!path.exists()) { path.mkdir(); } return new File(path, "new.png"); } 

La función anterior devolverá el archivo …

  • Borrar edittext enfocar y ocultar el teclado cuando se pulsa el botón
  • ActionBarSherlock con múltiples MenuItems?
  • Google Maps v2 en el Android Studio. No se encontró GeoPoint
  • Dejando caer 1 eventos en el piso
  • Eclipse: ¿Dónde poner NDK referencia? Falta el desarrollo nativo?
  • Android / Eclipse - búsqueda de archivos no utilizados (Java / XML)
  • Encontrar el número total de API que se utilizan en un código fuente de la aplicación de Android?
  • No se puede ejecutar dex: varios archivos dex definen Lcom / google / android / gms / analytics / internal / Command
  • Cómo agregar recursos de cadena en Eclipse?
  • Tejido para AndroidStudio / Eclipse - No se puede iniciar sesión con otro usuario
  • Cómo corregir El método startActivity (Intent) no está definido para el tipo new View.OnClickListener () error de sintaxis
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.