Bonjour,
Je suis débutant en programmation Java et j'ai comme projet de créer une petite application qui permettra de choisir différentes configuration wifi à partir du fichier wpa_supplicant.conf qui se trouve dans /data/misc/wifi sur ma tablette.
Au passage notez que ma tablette est "rooted".
Dans un premier temps je souhaite juste copier un fichier existant (une copie modifiée par moi même de wpa_supplicant.conf) à la place de wpa_supplicant.conf, donc l'écraser.
Problème, en regardant les logs j'ai le message d'erreur indiqué dans le titre de mon message.
J'ai regardé les permissions du fichier, elles sont "Read/Write" pour Owner et Group, et rien pour Others.
J'ai donc fait un essai en ajoutant les permissions à Read/Write pour Others (avec le programme RootExplorer) et la ça marche je peux lire et copier les fichiers en question avec mon programme.
Evidemment j'aimerai avoir la solution sans avoir à changer les permissions avec RootExplorer.
J'ai essayé en ajoutant:
Process p;
...
p = Runtime.getRuntime().exec("su");
Je vois bien quand j’exécute mon programme une demande pour lui donner les droits superutilisateurs - que j'accepte - mais il y a toujours un permission denied dans les logs et impossible de lire le fichier wpa_supplicant.conf
Voici le bout de code utiliser pour la copie du fichier:
Enfin, j'ai bien ça dans AndroidManifest.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public static boolean copyFile(String source, String dest){ Process p; try{ p = Runtime.getRuntime().exec("su"); File root = android.os.Environment.getRootDirectory(); // Declaration et ouverture des flux java.io.FileInputStream sourceFile = new java.io.FileInputStream(source); try{ p = Runtime.getRuntime().exec("su"); java.io.FileOutputStream destinationFile = null; try{ p = Runtime.getRuntime().exec("su"); destinationFile = new FileOutputStream(dest); // Lecture par segment de 0.5Mo byte buffer[] = new byte[512 * 1024]; p = Runtime.getRuntime().exec("su"); int nbLecture; while ((nbLecture = sourceFile.read(buffer)) != -1){ destinationFile.write(buffer, 0, nbLecture); } } finally { destinationFile.close(); } } finally { sourceFile.close(); } } catch (IOException e){ e.printStackTrace(); return false; // Erreur } return true; // Résultat OK }
Merci pour l'aide car je cale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Partager