comment faire la différence entre l'interne et à l'externe carte SD chemin dans android

Dans l'application android, j'ai besoin de le faire:

If(removable SdCard is present){
    String path=get the path of removable Sdcard() ;
    //using this path we will create some files in sdcard
} else{
    //display error message
}             

Pour cela, nous avons utilisé le code:

If (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)){
                String path= Environment.getExternalStorageDirectory().getPath();
}

Le code ci-dessus échoue dans quelques uns des derniers mobiles android. Merci de nous aider sur ce point.

Ci-dessous sont les détails de ce que nous avons essayé:

  • Dans android mobiles ayant des OS d'ICS et JellyBean, le chemin exact de l'amovibles sdcard varie en raison de fabricant de l'appareil.

Voir le tableau ci-dessous

Tested Devices  OS version  removable sdcard path   internal sd path
Samsung galaxy s2   4.0.4   /mnt/sdcard/external_sd /mnt/sdcard
Samsung S Advance   4.1.2   /storage/extSdCard      /storage/sdcard0
Samsung Galaxy s3   4.0.4   /mnt/extSdCard          /mnt/sdcard
Samsung Galaxy Note 4.0.4   /mnt/sdcard/external_sd /mnt/sdcard

Lors de l'exécution du code ci-dessus dans ces appareils nous avons obtenu:

  • L'API android de l'Environnement.getExternalStorageDirectory().getPath() renvoie uniquement le dd interne de chemin

  • Aussi les API de l'Environnement.getExternalStorageState() retourne l'Environnement.MEDIA_MOUNTED dans les dispositifs ci-dessus, même si la carte sd est retirée.

  • Plus de l'API de l'Environnement.isExternalStorageRemovable() renvoie toujours false pour les dispositifs ci-dessus amovible carte sd est présente ou non.

Nous avons cherché dans google et essayé de certaines fonctions-ils donné.Il ne donne que la liste des chemins d'accès stockage qui sont montés sur l'appareil.Mais il n'est pas indiquer si le removale sdcard est présent ou pas.

La fonction que j'ai essayé d'obtenir le chemin de stockage:

private static String getMountedPaths(){
String sdcardPath = "";
Runtime runtime = Runtime.getRuntime();
Process proc = null;
try {
proc = runtime.exec("mount");
} catch (IOException e1) {
e1.printStackTrace();
}
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
try {
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//TF card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
sdcardPath=columns[1];
}
} else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
mount.add(columns[1]);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return sdcardPath;
}

Est-il de toute autre fonction mieux que ci-dessus pour obtenir la liste des chemins d'accès stockage dans android ?
également aider à résoudre le problème ci-dessus .

j'ai moi aussi eu le même problème je pense que c'est le meilleur moyen d'obtenir le chemin d'accès internes et externes de l'appareil est comme ce que vous avez fait. Et quel est le problème avec le ci-dessus??
vérifier le lien ici. j'ai utilisé le même code que ci-dessus stackoverflow.com/questions/16637935/...
La "poursuite de l'API de l'Environnement.isExternalStorageRemovable() renvoie toujours false pour les dispositifs ci-dessus amovible carte sd est présente ou non."......Que voulez-vous dire ?

OriginalL'auteur Praveen | 2013-05-22