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
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.
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.
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é.
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
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()
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()))