La permission " <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />" est une permission dangereuse sur Android, c'est à dire avant de pouvoir créer un dossier ou fichier sur le périphérique d'un utilisateur à partir de la version 6 d'Android, tu dois lui demander la permission.
Pour demander facilement une permission sur Android à un utilisateur sans écrire trop de ligne de code,tu peux utiliser une librairie comme Dexter.Il existe d'autres librairies pour demander facilement une permission à un utilisateur sur Android.Dexter est assez cool.Voici le lien de Dexter sur Github
Ou tu peux directement insérer cette dépendance dans ton fichier gradle
implementation ('com.karumi:dexter:5.0.0')
Puis synchronise ton projet.
Maintenant des que l'utilisateur clique sur le bouton pour créer le fichier ou le dossier tu demande d'abord ta permission comme ça
Dexter.withActivity(this)
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
onCreateFile(nomDossier);
}
@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
}
}).check();
Voici ta methode onCreateFile
private File onCreateFile(nomDossier) {
// Tu dois lancer une boite de dialogue au autre chose durant tout le traitement
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+nomDossier+"/";
File root = new File(path);
if (!root.exists()) {
root.mkdirs();
}
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
timeStamp= "PNG_" + timeStamp + "_.png";
File file=new File(path+timeStamp);
if(file.exists()){
file.delete();
}
try{
if(file.createNewFile()){
FileOutputStream outputStream=new FileOutputStream(file);
//Tu fais tout ce que tu veux avec ton outputStream
}
}
catch(IOException e){
}
return file;
}
N'oubli pas dès que tu appelles la méthode onCreateFile , de lancer une boite de dialogue durant le traitement
Mon Blog