Android: l'Obtention de l'image bitmap à partir d'application tierce (par exemple, WhatsApp) par l'intermédiaire de contenus:// URI
Je suis en train d'essayer d'obtenir de l'image à partir de l'application tierce (e.g WhatsApp) de mon application (en cours de test sur de la Guimauve). Quand je fais "partager l'image" à partir de WhatsApp et de le partager avec mon application, j'obtiens URI quelque chose comme ceci:
content://com.whatsapp.provider.media/item/61025
Mais dans mon application quand je l'appelle getContentResolver().openInputStream(uri)
ou getContentResolver().openFileDescriptor(uri, "r")
avec au-dessus d'URI, il se bloque à l'exception:
java.lang.SecurityException: Autorisation de Déni: ouverture fournisseur
com.whatsapp.MediaProvider de ProcessRecord{a4b804a
30321:com.myapp/u0a145} (pid=30321, uid=10145) qui n'est pas exporté
de l'uid 10083
Ce que j'ai essayé jusqu'à présent
J'ai regardé pour cette exception sur DONC et trouvé question similaire posé mais pour importer des images à partir de Google, les Photos et les eu qui ont besoin d'ajouter la permission comme:
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
Mais pas convienced avec cela, car il pourrait y avoir de nombreuses applications, et de la nécessité d'ajouter la permission pour chacun d'eux, ou quoi.
Dans certains autres réponses il a été suggéré de lire/copier les données de fournisseur de contenu immédiatement. Mais vous ne savez pas comment. Parce que je suis une exception dans openInputStream
lui-même.
Je dois aussi mentionner que WhatsApp image peut être partagé avec succès avec d'autres applications (par exemple Google Drive) donc il doit y avoir un moyen de le faire.
Il vous plaît quelqu'un peut donner à partager des notes ou de solution de travail à ce sujet?
le fait que le fournisseur n'est pas exporté, seulement certains sous-ensemble limité de paquets peut y accéder (comme google drive), mais votre application n'est pas autorisé à le faire
oui, j'ai la permission
Si c'est le cas, quels seraient les critères. Parce que j'ai essayé avec une autre non Google apps (par exemple, un éditeur d'image app InShot, transfert de Fichiers, Xender) et il travaille avec eux. De toute façon, c'est que documenté nulle part merci de partager le lien. Merci.
Poste le code que vous avez essayé manifeste. Ce problème se produit alors que le partage de WhatsApp seulement ou à partir d'autres applications? Ce sujet à partir de la galerie?
OriginalL'auteur Atul | 2017-10-05
Vous devez vous connecter pour publier un commentaire.
Ok. J'ai trouvé où était le problème. Dans mon application initiale de l'activité, j'ai été le stockage de contenu URI (que j'ai obtenu à partir de la troisième partie application comme WhatsApp ou Chrome ... par exemple content://com.whatsapp.fournisseur de.médias/item/61025) dans un tableau et a été accéder à partir de tout autre activité.
Qui a été pas correcte. J'ai eu soupçon de cette réponse et j'ai appelé
getContentResolver().openInputStream(uri)
droit à partir de l'app launcher activité tout de suite après je reçois des contenus partagés. Et cela a fonctionné, n'est-ce pas jeter aucune exception.n'essayez pas de chemin d'URI Ses pas la bonne façon de traiter avec les Uri. Au lieu d'utiliser
getContentResolver().openInputStream(uri)
getContentResolver().openInputStream(uri) de quoi il en retourne ?? Je suis totalement confus
getContentResolver().openInputStream
retourneInputStream
dont vous avez besoin pour lire des données partagées. Par exemple, si c'est des données d'image vous pouvez appelerBitmapFactory.decodeStream
. Veuillez Google comment lire les données à partir deInputStream
.Merci pour l'explication, je l'ai résolu. Il était de retour bitmap à partir d'BitmapFactory.decodeStream et à partir de là, j'ai eu le chemin.A pris 2 jours waouh!! +1 pour votre aide.
OriginalL'auteur Atul