8
votes

Faire un fichier image visible dans la galerie Android sur Lollipop

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 "{sdcard} / android / data / {appid} / images / {sous-dossier} /" ).

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: xxx

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 {sdcard} / Android / Data / , donc aucun balayage de support normal ne doit les choisir ...

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?

Modifier: Notez que même un redémarrage du téléphone (qui devrait également déclencher un Rescan de fichiers) ne fonctionne pas. Et pour une raison de bonne raison que les fichiers sont dans un sous-dossier d'un répertoire "nomedia" ... toute solution contenant une émission Media_Mountée est une sorte d'inutile, je suppose.


1 commentaires

PLZ Regardez ma réponse, je pense que son travail pour vous.


5 Réponses :


2
votes

Je vous suggérerais de jeter un coup d'œil à Ma réponse Ici . Il enveloppe toutes les conclusions autour de mediaScanner que j'ai fait.

Note latérale: Tous les problèmes Kitkat Semblant à coller sur Lollipop aussi.


2 commentaires

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.



0
votes

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);


0 commentaires

0
votes

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);
                    }
                });


    }


4 commentaires

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.



0
votes

Comme vous l'avez dit que {SDCARD} / Android / Data / strong> contient un fichier .nomedia, nous pouvons envoyer une diffusion pour le 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")));


0 commentaires

9
votes

Essayez ci-dessous le code. Ça travaillant pour moi dans sucette , espère travailler pour vous aussi xxx

éditer: N'oubliez pas d'ajouter ceci à votre manifeste (bien que dans la sucette, cela ne devrait pas plus besoin d'être nécessaire): xxx


2 commentaires

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