2010-09-22 4 views
0

J'utilise le mode Gallery3D - mais je veux qu'il affiche uniquement les images d'un sous-dossier sur la carte SD, pas toutes les images qui y sont stockées. Pour ce faire, j'ai essayé de changerUri de FilePath

public static final Uri STORAGE_URI = Images.Media.EXTERNAL_CONTENT_URI;

à

public static final Uri STORAGE_URI = Uri.fromFile(new File(ROOT_DIR));,

String ROOT_DIR = Environment.getExternalStorageDirectory().toString() + "/mySubDirectory";

mais je suppose que cela est en train de transformer un content:// -uri à un file:// -uri et cela peut être un problème?

Dans tous les cas, il ne fonctionne pas :-(! Au lieu de simplement montrer des images de la ROOT_DIR -directory et ses sous-répertoires, il montre aucune image (« Galerie vide »). Quelqu'un pourrait-il me diriger dans la bonne direction quant à ce que je fais mal?

Répondre

0

J'ai aussi (plus tard) posé cette question sur le groupe Google Android Developer et le consensus était que la structure actuelle du code Gallery3D, mon objectif ISN 't possible et je devrais changer la source d'images à une base de données (personnalisée) dans laquelle mes chemins d'image sont stockés.

0

Edité

Je suppose que vous voulez dire que le Open Source code for Gallery3D. au lieu de changer le fournisseur de contenu Uri STORAGE_URI, avez-vous regardé changer CAMERA_IMAGE_BUCKET_NAME dans ImageManager.java et/ou CAMERA_BUCKET_NAME en LocalDataSource.java?

Je vois several placesgetExternalStorageDirectory() est mentionné.

Vieille réponse

Essayez d'utiliser withAppendedPath(Uri baseUri, String pathSegment) pour ajouter votre sous-répertoire à l'Uri. Peut-être quelque chose comme ceci fonctionnerait pour vous:

Uri.withAppendedPath(Images.Media.EXTERNAL_CONTENT_URI, 
    Uri.encode("mySubDirectory")); 
+0

Merci, Brian. Malheureusement, cela ne fonctionne pas non plus. J'ai seulement vu que 'withAppendedPath' était utilisé avec une chaîne comme chemin, par ex. 'Uri u2 = Uri.withAppendedPath (u," 1 ");' qui fait u2: 'content: // media/externe/images/media/1', je ne pense pas qu'un chemin Uri réel est valide extension de la base-Uri? Je suppose que je dois filtrer la colonne 'MediaStore.Images.Media.DATA' par filepath ... d'une certaine manière? – Nick

+0

J'avais suggéré d'utiliser 'Uri.encode()' car la documentation de 'pathSegment' disait qu'il fallait un" segment de chemin codé pour s'ajouter ". J'ai édité ma réponse avec une autre suggestion. – Brian

+0

Merci pour votre modification. J'ai déjà essayé de changer le seau de caméra dans mon répertoire (plutôt que de le laisser dans '/ DCIM'), mais ce morceau de code semble juste gérer l'étiquette de la caméra et le symbole -icon sur le dossier de caméra respectif (ie montrer un "Camera" -icon ou un "Folder" normal -icon). – Nick