2017-08-08 6 views
0

** EDITImpossible d'accéder à la carte SD android

Au lieu d'un sdcard, je suis d'y accéder via des adaptateurs via le port USB, il pourrait être préférable de le considérer comme un lecteur USB. Après beaucoup de lutte et de recherche, j'ai été en mesure de trouver un moyen d'atteindre le chemin de la carte SD (clé USB) avec laquelle je travaillais. En général, le chemin est/mnt/media_rw/XXXX-XXXX (où XXXX-XXXX est un code de la carte SD (clé USB)).

La chose est, je suis en train de lire certains fichiers qui sont là-dedans, mais quand je l'appelle

new File("/mnt/media_rw/XXXX-XXXX").listFiles(); 

-je obtenir un tableau qui retourne null. Je suis assez certain qu'il a des fichiers à l'intérieur, car j'ai un téléphone où cela fonctionne, mais dans ce téléphone, le chemin n'est pas "mnt/media_rw/XXXX-XXXX". L'utilisation du même chemin que dans ce téléphone ne fonctionne pas.

Je suis arrivé à ce chemin à travers ce poste How can I get the list of mounted external storage of android device

J'ai 2 autorisations: READ_EXTERNAL_STORAGE et READ_PHONE_STATE. J'ai dû les ajouter bot dans le manifeste et par programmation (ne sais pas pourquoi ne fonctionne que si les ajouter dans les deux, mais pas séparés).

** AJOUTÉE

public static String findFileInStorages(String filename) throws Exception { 
    List<StorageUtils.StorageInfo> storageList = StorageUtils.getStorageList(); // Here i get 2 paths: 1) /storage/emulated/0; 2) /mnt/media_rw/XXXX-XXXX 
    for(int i = 0; i < storageList.size(); i++) { 
     String pathToFile = findFileWithBasePath(new File(storageList.get(i).path, filename); 
     if (pathToFile != null) return pathToFile; 
    } 
    throw new Exception("Couldn't find file"); 
} 

public static String findFileWithBasePath(File file, String fileName) throws Exception { 
    File listFile[] = file.listFiles(); 
    String outputFile = null; 
    if (listFile != null && listFile.length > 0) { 
     for (int i = 0; i < listFile.length; i++) { 
      if (listFile[i].isDirectory()) { 
       outputFile = findFileWithBasePath(listFile[i], fileName); 
      } else { 
       if(listFile[i].getName().contains(fileName)) { 
        return listFile[i].getAbsolutePath(); 
       } 
      } 
      if (outputFile != null) return outputFile; 
     } 
    } 
    return null; 
} 

La méthode "getStorageList()" et "StorageUtils" et des classes "StorangeInfo" sont dans le lien ci-dessus. Je n'ai pas changé une chose du code dedans.

S'il y a quelque chose que je peux ajouter, il suffit de le demander.

Merci

+0

Postez votre code ..... –

+0

Vous n'avez pas accès au système de fichiers à des emplacements arbitraires sur [support amovible] (https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage .html) sur Android 4.4+. – CommonsWare

+0

Pensez-vous que cela vous aidera? https://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String) – notsopopularguy

Répondre

0

Il existe une méthode de contexte pour récupérer le chemin à toutes les cartes SD

context.getExternalFilesDirs(null) 

retour chemins absolus vers des répertoires spécifiques à l'application sur tous les périphériques de stockage partagés/externes où l'application peut placer persistante les fichiers qu'il possède.

+0

Je pense que j'ai essayé cela sans succès. La chose est le fichier que je veux lire n'est pas de l'application, mais il est dans une carte SD externe. Avec cela, j'ai essayé de chercher le fichier dans les dossiers apparaissent ici ou ses parents –