Impossible de charger l'image lorsqu'elle est sélectionnée à partir de la galerie sur Android 4.4 (KitKat) à l'aide de PhoneGap Caméra Plugin
Je suis en train de définir la source d'une balise img dans mon application basée sur l'image choisie à partir de l'appareil galerie d'image à l'aide de la PhoneGap/Cordova Caméra Plugin.
Il a travaillé précédemment comme prévu sur les anciennes versions d'Android (3.3) et fonctionne très bien sur iOS, mais maintenant ne parvient pas à résoudre le chemin de l'image sur 4.4 (KitKat).
Retournés chemin pour retourner l'url de l'image ressemble à quelque chose comme:
content://com.android.providers.media.documents/document/image%3A352
Lorsque j'utilise cette voie pour définir l'image src via JavaScript, l'URL ne peut pas être résolu et produit donc une erreur de chargement. Il n'y a pas de problème lorsque vous prenez une photo avec l'appareil photo, il semble que pour se produire au moment de choisir une photo existante de la galerie.
J'ai essayé de l'encodage en base64 et j'ai aussi essayé la méthode mentionnée dans les docs resolveLocalFileSystemURI();
mais je n'ai pas eu de chance avec ces derniers. J'ai aussi essayé de l'enlever de l'appareil photo plugin et la reconstruction de l'application, mais pas de joie.
Ma conjecture est que quelque chose a changé avec la façon dont KitKat poignées de la galerie et de PhoneGap/Caméra plugin n'ont pas été mis à jour pour accueillir encore.
- et que dire de content_type? comment faire pour l'avoir aussi?
Vous devez vous connecter pour publier un commentaire.
Quelque chose s'est cassé dans Android 4.4 avec l'URI de l'encodage des images.
Un bug a été déposée à l'encontre de Cordova ici: https://issues.apache.org/jira/browse/CB-5398
Dans les docs pour getPicture, sous l'Android Quicks l'article, il traite de ce problème et des points à un StackOverflow question avec une solution de contournement (modifier la Caméra plugin java code pour le forcer à ouvrir l'application Galerie au lieu de l'Accès au Stockage-Cadre de l'app.)
Il semble une autre chose que vous pourriez faire est de définir le type de destination à DATA_URL.
Une sorte de vraiment-très-sale solution fonctionne pour moi que ce bug est corrigé. Utilisation en cas d'extrême nécessité 🙂
Adobe m'assure que ce problème va être résolu dans 3.5.0. Il n'est pas fixé dans la version 3.4. Comme 3.5.0 est prévue pour être communiqué à la mi-Mai, je vais juste attendre jusque-là.
Adobe prétend que ce n'était pas un changement qui pourrait être faite sur le plugin niveau. C'était un changement de base dans les cordova code. Il est trop mauvais, il a fallu tant de temps pour eux de venir avec ce correctif.
Mise à JOUR: Cordoue 3.5.0 a été publié le 9 Mai. Vous pouvez le télécharger lfi nœud et de voir si les problèmes sont en fait résolu.
Voici une solution simple à ce problème:
remplacer ceci:
par ceci:
si vous êtes à l'aide de JavaScript, vous pouvez utiliser ce code:
cette technique de la force de l'uri de laisser passer "%3A" comme elle est, sans la modifier afin de ":", espérons que cela fonctionnera pour vous !
Pas beaucoup plus robuste, juste un peu plus de contrôles pour des conditions particulières comme "contenu:" sans extensions. Aussi, depuis que j'ai besoin de le télécharger, je suis la détection de l'extension, ou d'en créer un .extension jpg si le fichier n'a pas un:
Chaque fois que certains
uri
est passé dans<img src="uri" />
il est implicitement décodé à partir deen
Cependant, après le retour de
Intent.ACTION_OPEN_DOCUMENT
ouIntent.ACTION_GET_CONTENT
Android vous donne l'autorisation de lecture pour (1), pas (2). Dans ce casWebView
sera dans l'expectative journal d'une erreur:ou
Extrait de Code
Tous vous avez besoin pour résoudre le problème est
dans votre code Java avant de passer
uri
en HTML/JS pour s'assurer que (1) sera effectivement chargé.Je l'ai testé que sur 4.4.2, 4.4.4 et 5.0. Le plus drôle, c'est que Android 4.4.2 décode le
uri
en interne deux fois.