web-dev-qa-db-fra.com

mkdirs android ne fonctionne pas

j'ai besoin de sauvegarder une image de la caméra sur Android . J'ai utilisé l'autorisation d'écriture de stockage externe dans Manifest et j'utilise ce code.

File dir = new File(Environment.getExternalStorageDirectory(), "Test");
if (!dir.exists() || !dir.isDirectory())
    dir.mkdirs();

String path = dir.getAbsolutePath();
Log.d(TAG, path);                     //log show the path
File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
Log.d(TAG, file.getAbsolutePath());   //again path is shown here

outStream = new FileOutputStream(file);
outStream.write(bytes);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + bytes.length);   //fail here
} catch (FileNotFoundException e) {
Log.d(TAG, "not done");                       //error is here (this exception is thrown)
} catch (IOException e) {
Log.d(TAG, "not");
} finally {  }

j'ai aussi essayé mkdir () au lieu de mkdirs () même résultat.

aucune idée de ce qui s'est mal passé dans le code? 

merci

11
lallous34

Pour ceux qui ne sont pas aussi expérimentés que moi. Je me suis battu contre ce problème, j'ai perdu mes cheveux pendant un certain temps. Je vise api 21 (pour des raisons de compatibilité) et cela a fonctionné sur Lollipop mais sur Marshmallow, il ne créerait pas le répertoire. J'avais l'autorisation "utilisations" dans le manifeste, mais cela ne fonctionnerait toujours pas. Apparemment, à Marshmallow, lorsque vous installez avec Android Studio, il ne vous demande jamais si vous devez lui donner l'autorisation. Vous devez aller dans Paramètres, applications, sélectionnez votre application et activez le commutateur d’autorisations.

32
protocolkey

IDIOT ME! J'ai utilisé l'autorisation du manifeste, mais une fois l'application installée sur le téléphone, je n'ai pas accordé d'autorisation pour le stockage! ... je comprends un point négatif pour cette question ... mais j'espère que si quelqu'un d'autre fait face à la même chose. Vérifiez votre autorisation téléphonique. désolé tout pour le dérangement.

3
lallous34

si vous testez sur Android M, vous devriez probablement vérifier Paramètres> App> Permission pour voir si l'autorisation d'accéder au stockage est accordée. Cela m'a sauvé.

2
Eaweb

As-tu mis 

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

dans votre AndroidManifest? Si vous utilisez Android M, vous devez demander à l'utilisateur l'autorisation d'écrire sur sd. Regardez ici un exemple

2
mcatta

vous avez créé le répertoire, pas le fichier. Créer un nouveau fichier avec le code suivant

File file = new File(dir.getAbsolutePath() + "/Pic.jpg");
file.createNewFile()
0
Ravi Rupareliya

Essaye ça. Fournir une autorisation d'exécution pour Marshmallow c'est parfaitement fonctionner dans mon code d'application: 

 private String getFilename(String strFileName) {
        String filepath = Environment.getExternalStorageDirectory().getPath();
        File fileBase = new File(filepath, "Test");
        if (!fileBase.exists()) {
            fileBase.mkdirs();
        }
        return (file.getAbsolutePath() + "/" + strFileName + file_exts[currentFormat]);
    }

new File(getFilename(edt.getText().toString().trim()))
0
Mayur Patel