2010-08-24 5 views
0

Dans mon application Android 1.6 Je suis appeler la caméra par défaut en utilisantProblème d'enregistrer l'image dans un répertoire particulier dans Android

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

et mentionnant le répertoire de sortie

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/image.jpg"))); 

Cela fonctionne très bien. Cependant, si je le remplace par

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getDataDirectory() + "/image.jpg"))); 

le bouton ok (attacher) ne répond pas. J'ai ajouté ce qui suit dans AndroidManifest.xml

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

Comment résoudre ce problème?

Répondre

0
Environment.getDataDirectory().getAbsolutePath()+"/data/your package"+"/image.jpg" 

Vous devez enregistrer le fichier à l'intérieur/données/votre package/nom de fichier

+0

Je ne le ferais pas de cette façon. C'est ce que Context.getFilesDir() est pour. – EboMike

2

Environment.getDataDirectory() ne devraient pas être d'intérêt pour vous. C'est le répertoire de données privé d'Android, et il n'y a vraiment aucune raison pour qu'une application y accède.

Si quelque chose, utilisez Context.getFilesDir(). Mais gardez à l'esprit que même cela est par défaut privé à votre application, donc d'autres applications (y compris le magasin de médias) ne seront pas en mesure d'y accéder. Cela dit, vous avez toujours la possibilité de rendre les fichiers lus ou inscriptibles.

EDIT: Vous pouvez utiliser Context.getDir() avec Context.MODE_WORLD_WRITEABLE pour écrire un répertoire dans lequel d'autres applications peuvent écrire. Mais encore une fois, je doute de la nécessité de stocker des données d'image dans le stockage local. Les utilisateurs n'apprécieront pas cela, à moins que les utilisateurs ne doivent pas avoir monté leur carte SD lors de l'utilisation de votre application (ce qui n'est pas courant).

+0

Merci essayé cela .. mais ne fonctionne pas. J'appelle mediastore. Donc, toute solution de contournement? – Prabhat

+0

"Vous avez essayé" ce qui signifie que vous avez essayé getFilesDir(), ou que vous avez rendu les fichiers lisibles dans le monde? Aussi, y a-t-il une raison pour laquelle vous ne les mettez pas sur la carte SD? Avec le stockage interne étant limité, je ne vois pas de raison de le charger avec des données d'image. – EboMike

+0

Oui. J'ai essayé getFilesDir(). Cela n'a pas fonctionné. Le point est que si l'utilisateur supprime la carte SD et exécute l'application, il plantage. Donc, je veux le stocker dans la mémoire de données du téléphone. – Prabhat

Questions connexes