2012-06-22 4 views
5

J'essaie d'obtenir le chemin local d'une image pour la télécharger sur un serveur. Lors de l'utilisation pré ICS il obtiendrait un chemin standard dans le périphérique android via getRealPathFromURI(theURI)getRealPathFromURI() ne fonctionne pas avec les images ICS et Picasa

Cependant, avec ICS URI contiendra un uriString comme quelque chose comme: content://com.google.android.gallery3d.provider/picasa/item/12312312312312.

et en cours d'exécution getRealPathFromURI(theURI) retours null

Ai-je besoin maintenant d'extraire le uriString ci-dessus et télécharger manuellement l'image via l'API (si je perçois que son image galerie Picasa) plutôt que stocké localement? ou est-ce que je manque complètement quelque chose?

Merci pour tout conseil

EDIT:

semble que je cherchais sur la mauvaise question ...

trouvé le problème dans le lien ci-dessous ... qui est à peu près ce que Je m'attendais à devoir faire. Assez agaçant google/Android n'a pas gérer cela plus élégamment.

Pour gérer correctement extraire une image de la galerie que vous devez gérer trois scénarios:

  1. L'utilisateur a sélectionné un fichier image locale

  2. L'utilisateur a sélectionné une image Picasa et le périphérique est en cours d'exécution Version Android avant 3.0

  3. L'utilisateur a sélectionné une image Picasa et l'appareil exécute la version Android 3.0 ou ultérieure

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

+0

Ce lien a été incroyablement utile. – Calvin

Répondre

5

C'est ce que j'ai découvert sur l'appareil Android 4.0+ en cours d'exécution. L'URI ICS que vous avez donné à titre d'exemple est un URI avec content: // scheme, donc un ContentProvider devrait en être responsable. Par conséquent, à quoi sert l'utilisation de ce truc getRealPathFromURI()? Laisser simplement ContentResolver faire ce travail pour vous:

InputStream inStream = getContentResolver().openInputStream(theUri); 
Bitmap bitmap = BitmapFactory.decodeStream(is); 
+0

Comment obtenir un fichier à partir du chemin d'accès google drive? –

+0

Savons-nous qu'il y a * un * fichier lorsque vous utilisez Google Drive? Je suppose que le but de ContentResolver est de faire une abstraction des sources de données. Vous n'avez pas besoin de savoir où sont les données ni comment les récupérer. Peut être un fichier. Peut être des données de Google Drive. Tu t'en fous. –

Questions connexes