2011-12-04 1 views
3

Je travaille sur un programme d'organisation de fichiers multimédias pour Android et je souhaite déplacer des fichiers multimédia dans une structure de répertoire telle que root/Artist/Album/Song. flac. Je suis en boucle à travers une structure de données contenant cette information et en créant des dossiers en utilisant mkdirs(). Lorsque je parcours les dossiers créés (en utilisant OI File Manager ou File Expert), je peux entrer dans le répertoire de premier niveau et voir les noms des répertoires de second niveau, mais ils sont indiqués par des fichiers de 0 octet. Au début, je pensais qu'ils n'étaient vraiment que des fichiers et j'ai essayé à nouveau, mais si je les consulte dans ADB ce sont des fichiers. Les autorisations sont le problème:Android mkdirs() définit des permissions non valides, verrouille les autres applications du dossier

Par exemple, j'ai ma racine à/mnt/stockage/FLAC:

ls -l 
drwxrw-rw- 4 app_63 app_63 16 Dec 3 20:42 Artist_1 
drwxrw-rw- 3 app_63 app_63 16 Dec 3 20:42 Artist_2 
... 

Les deuxième répertoires de niveau (/ mnt/stockage/FLAC/Artist_1 etc) ont la même autorisations sur les dossiers Album.

Si je modifie manuellement les autorisations avec chmod, en définissant les deux dossiers de niveau sur drwxrwxrwx (777), je peux y accéder et lire les fichiers dans le gestionnaire de fichiers. Cela peut être fait avec chmod + x.

Voici le code que je utilise:

public void organizeFiles(String rootDir, ArrayList<libraryElementArtist> libraryData) 
{ 
    for(int i = 0; i < libraryData.size(); i++) 
    { 
     //create artist folder 
     //{ 
     // (new File(rootDir + File.separator + libraryData.get(i).name)).mkdirs(); 
     //} 
     for(int j = 0; j < libraryData.get(i).albums.size(); j++) 
     { 
      //create album folder 
      (new File(rootDir + File.separator + libraryData.get(i).name + File.separator + libraryData.get(i).albums.get(j).name + File.separator)).mkdirs(); 
      for(int k = 0; k < libraryData.get(i).albums.get(j).songs.size(); k++) 
      { 
       //move song into folder 
       FileOperations.moveFile(libraryData.get(i).albums.get(j).songs.get(k).filename, rootDir + "/" + libraryData.get(i).name + "/" + libraryData.get(i).albums.get(j).name); 
      } 
     } 
    } 
} 

Ceci est la fonction MoveFile:

public static boolean moveFile(String sourcefile, String dest) 
{ 
    File file = new File(sourcefile); 
    File dir = new File(dest); 
    return file.renameTo(new File(dir, file.getName())); 
} 

J'ai cette ligne dans mon fichier Manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Le le stockage est de 16 Go interne ext3 sur mon appareil. Comment dois-je ajouter ce correctif d'autorisations à mon code?

+0

ce 'rootDir' est toujours sur la carte SD? – havexz

Répondre

0

Vous avez besoin de l'autorisation suivante dans votre Manifest App:

android.permission.WRITE_EXTERNAL_STORAGE 

Ref:

Storage

+0

Désolé, j'avais déjà cela dans mon fichier manifeste mais le formatage l'a caché dans ma question. J'ai édité ma question. Le problème n'est pas qu'il ne peut pas faire le répertoire, c'est qu'il le fait avec les mauvaises permissions (le répertoire est créé très bien et à la racine tout s'est parfaitement déroulé, juste les autres applications n'ont pas l'autorisation de l'utiliser). – CalcProgrammer1

Questions connexes