J'essaie de faire quelques photos prises dans l'application visible dans la galerie (afin qu'elles puissent être partagées et examinées à l'extérieur de l'application), mais je veux garder les images elles-mêmes à l'intérieur du répertoire de données de l'application. Ainsi, lorsque l'application est supprimée, elles sont supprimées (elles sont donc stockées dans J'ai regardé à beaucoup de réponses et pour les anciennes versions d'Android des deux solutions suivantes, mais ils ne semblent pas travailler en sucette: p> J'ai testé cela dans un Nexus 4 (Android 5.0.1) et un Nexus 6 (Android 5.1) et cela ne fonctionne pas. Dans un Nexus 7 (Android 4.2.2), il fonctionne. Tous les 3 périphériques ont un fichier ".onmedia" dans le dossier Est-ce que quelqu'un Connaître une œuvre pour que cela fonctionne pour travailler sur tous les appareils / versions Android? Si ceci en raison du fichier NOMEDIA ne fonctionne pas en premier lieu et est une lollipop la seule version qui le fait correctement? P>
5 Réponses :
Je vous suggérerais de jeter un coup d'œil à Ma réponse Ici . Il enveloppe toutes les conclusions autour de Note latérale: Tous les problèmes mediaScanner code> que j'ai fait. P>
Kitkat CODE> Semblant à coller sur
Lollipop code> aussi. P>
Merci. Mais ils ne semblent tous pas être la solution. Même le hack d'envoi de la diffusion "montée" à travers la coquille ne fonctionne pas ...
Correct. Comme je l'ai dit, il n'y a pas de solution de travail pour Kitkat, et il n'y en a pas pour Lollipop.
Je ne suis pas shreau si le fournisseur de contenu multimédia obtiendra des autorisations de lecture pour votre répertoire de données local contenant les imagences. Sans les autorisations Votre galerie Aprovach ne pouvait pas fonctionner.
Pour savoir s'il est possible, vous pouvez essayer de faire des références aux images locales dans la base de données des médias Androids via P>
mMediaProvider = mContext.getContentResolver().acquireProvider("media"); mImagesUri = Images.Media.getContentUri(volumeName); result = mMediaProvider.insert(mImagesUri, values);
Après avoir enregistré l'image, appelez la méthode de numérisation pour analyser la galerie, elle affichera les images dans la galerie.
scanFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/appfolder/imgname"+imagenumber+".png"); private void scanFile(String file) { MediaScannerConnection.scanFile(this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); }
Vous devez actualiser ce fichier spécifié, alors ses œuvres, testées à Nexus 5, 5.0.2 .. Son travail ,
Je pensais pour une seconde que vous pourriez être la différence que vous utilisez le chemin absolu au lieu de fichier.tostring (), mais toujours avec fichier.getabsolutepath (), il ne fonctionne pas sur mon Nexus 4, 5.0.1 si le journal le dit a été scanné: i / exsternstorage: scanné /storage/emulate/emulated/0/androïd/data/com.something/files/picture S / 10141/7657 / RZ-1430 906494186.jpg: i / externstorage: -> uri = Contenu: // Media / Externe / Fichier / 43992 Quelle application utilisez-vous pour vérifier la galerie? J'ai essayé "Photos" Googles et Telegram (Share Image).
Photos Google seulement et après avoir enregistré des photos dans Post Execute App appelez la méthode de numérisation Scanfile (Environnement.getExternalStoragedirectory (). Getabsolu Tepath () + "/dd/dddd"+imagenumber+".png");
Ahh .. Mais vous utilisez le répertoire de stockage externe public? Parce que ce qui en fait un problème, c'est que les fichiers sont stockés dans le répertoire d'applications privé "externeStorage / Android / Data / APP-ID / Files / Images / ...". Je souhaite que les fichiers soient supprimés lorsque l'application est supprimée, mais aussi longtemps que l'application, je souhaite qu'ils soient visibles / partageables à l'aide d'autres applications / galerie.
Comme vous l'avez dit que mediaScanner code> pour analyser les sous-dossiers du dossier contenant du fichier .nomedia en spécifiant ce chemin de sous-dossier en utilisant un code ci-dessous.
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file:// "+"Directory path")));
Essayez ci-dessous le code. Ça travaillant pour moi dans sucette forte>, espère travailler pour vous aussi éditer: N'oubliez pas d'ajouter ceci à votre manifeste (bien que dans la sucette, cela ne devrait pas plus besoin d'être nécessaire): p>
Merci. J'avais peur que cette réponse ne fonctionnait pas pour moi, mais c'était parce que j'avais l'autorisation "Ecrire un stockage externe" que pour le SDK 18 et plus bas. Maintenant, avec la permission pour tous les SDK, cela fonctionne. Vous devez toujours tester dans des versions inférieures d'Android, mais c'est au moins le début parfait!
J'ai eu 100 réputations plus juste parce que j'ai surfé sur le Web Stackoverflow Web hier, à la recherche de cette réponse géniale. Merci @lokesh
PLZ Regardez ma réponse, je pense que son travail pour vous.