D'obtenir une image de la Galerie sur Picasa/Google + les dossiers synchronisé ne fonctionne pas
Je suis en train d'essayer d'obtenir une image de la galerie app à partir de l'un des dossiers à partir de Google+ synchronisé les photos. Après avoir sélectionné l'image, l'Uri est passé correctement. Mais quand j'essaie d'obtenir le chemin d'accès réel de l'image sur le périphérique de stockage, de sorte que je peux l'utiliser, il se bloque. Le problème semble être spécifiquement avec la picasa fournisseur de contenu.
Testé sur Nexus S et Nexus 7, et d'autres appareils en tant que bien.
E/AndroidRuntime(14572): java.lang.RuntimeException: Échec de remise résultat ResultInfo{qui=null, demande=1, résultat=-1, data=Intention { dat=content://com.google.android.gallery3d.fournisseur/picasa/item/5427003652908228690 }}
Ici, le dat champ semble être correctement passage de l'Uri, mais lorsque j'essaie de récupérer l'image de l'emplacement, il plante avec l'erreur suivante.
W/GalleryProvider(14381): non pris en charge colonne: _data
Semble que le fournisseur de contenu pour Picasa albums n'ont pas de _data champ.
Le code pour obtenir l'emplacement est le suivant:
//imageUri est l'Uri à partir de ci-dessus. String[] proj = { MediaStore.Les Images.Médias.DONNÉES }; Curseur curseur = contexte.getContentResolver().requête(imageUri, proj,null, null, null); int column_index = curseur.getColumnIndexOrThrow(MediaStore.Les Images.Médias.DONNÉES); le curseur.moveToFirst(); String filePath = curseur.getString(column_index); le curseur.close();
La seule des colonnes qui semblent être pris en charge pour cette image:
[user_account, picasa_id, _display_name, _size, mime_type, datetaken, la latitude, la longitude, l'orientation]
Comment pouvons-nous obtenir l'emplacement réel de cette image. Et si nous ne sommes pas censés travailler avec cette image, ces images ne doivent pas être indiqués à l'utilisateur dans la première place.
De son Intention de lancer l'application galerie est:
Intent intent = new Intent(); l'intention.setType("image/*"); l'intention.setAction(Intention.ACTION_GET_CONTENT);
- Le _data champ est le contenu de l'image et je ne pense pas à distance les images sont stockées dans il. Vous pouvez essayer d'utiliser l'uri pour l'obtenir à partir d'internet.
- Elle renvoie l'url seulement sur certains modèles. J'ai vérifié un téléphone HTC, il ne me donner l'url, mais d'autres téléphones n'ont pas. Mais encore une fois, le problème avec le fait d'avoir l'Url, c'est quand que l'URL n'est pas accessible au public.
- Hey check this out ce qui pourrait vous aider. stackoverflow.com/questions/5944282/...
Vous devez vous connecter pour publier un commentaire.
J'ai perdu maintenant beaucoup d'heures et maintenant j'ai trouvé une solution qui fonctionne dans tous les cas, sans la magie de téléchargement en fils spéciaux ou quelque chose. La méthode suivante renvoie un flux de contenu que l'utilisateur a sélectionné et cela fonctionne avec le tout à l'état sauvage.
Après beaucoup de recherches, j'ai senti qu'il y avait trop de nombreuses solutions pour faire quelque chose qui semble être assez simple. Donc, je suis allé de l'avant un a écrit une petite bibliothèque qui gère les complexes si elses et arrive à travailler pour tous les scénarios possibles que je peux penser. Donnez-lui un essai et voir si cela aide.
http://techdroid.kbeanie.com/2013/03/easy-image-chooser-library-for-android.html
C'est une mise en œuvre initiale. Bien qu'il gère presque toutes les situations, il pourrait y avoir quelques bugs. Si vous utilisez cette bibliothèque, s'il vous plaît laissez-moi savoir vos commentaires et si elle pourrait être améliorée davantage.
J'ai connu le même problème sur an.. je vous montre ma solution (le code est assez bordélique, merci de refactoriser le code).
Donc, vous avez l'image d'URI, qui a été retournée à partir de la galerie:
Et maintenant nous avons besoin de la fonction de téléchargement de l'image:
ImageInfo est ma classe pour stocker chemin vers l'image et son orientation.
Basé sur @drindt réponse, ci-dessous les codes de donner téléchargé temporaire
File
chemin à partir de Google Photo nuage synchronisé sur-mais-pas-dans-fichier de périphérique.Ci-dessous astuce a fonctionné pour moi, ce que je fais ici est de savoir si il n'y a aucune autorité url dans URI, alors je suis entrain de créer un temporaire de l'image à l'aide du code ci-dessous & retourner le Contenu de l'URI de la même chose.
J'ai répondu similaire la question ici que de bien..
J'ai utilisé cette approche fonctionne bien pour moi,
espérons que cela vous aide à vous ....
ACTIVITYRESULT_CHOOSEPICTURE est l'int vous utilisez lors de l'appel de startActivity(intent, requestCode);
si le code ci-dessus ne fonctionne pas que de simplement se référer à ce lien... il va sûrement montre le chemin
http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/
Enfin terminé avec un classique solution...By à l'aide de Document.util, qui couvre tous pouvoirs à l'effet :-1-à l'Intérieur de votre onActivityResult():-
2 - Créer une classe DocumentUtils:-
}
3 - Aussi, vous aurez besoin de la fonction suivante dans ImageLoader.java:-