2010-02-11 12 views
1

Je dois faire une application de visionneuse d'image dédiée pour Android 2.x.Beaucoup de fichiers d'image dans res/drawable, Comment accéder à Android?

Il y a trop de fichiers image jpeg: environ 2000 ~ jpegs, plus de 100MB.

Je veux accéder aux fichiers image avec leurs noms de fichier, mais je n'ai pas trouvé un tel exemple. Par ailleurs, est-il correct de mettre beaucoup de fichiers image dans le dossier/res/drawable?

J'ai entendu dire que l'application Android ne peut pas être installé sur sdcard et

le dépôt du programme est très faible si l'application de 100 Mo ne peut pas être installé en général.

J'ai trouvé quelques exemples qui téléchargent les fichiers de données volumineux sur sdcard en ligne,

mais je ne peux pas exécuter un serveur Web pour héberger les fichiers de données,

et je dois télécharger le programme entièrement emballé sur Android Market . (Dois-je créer un fichier apk?)

Quelles sont les meilleures pratiques pour gérer trop d'images ressources (ou quelque chose) dans Android?

Répondre

0

N'a pas essayé moi-même, mais il semble que cela pourrait fonctionner:

public BitmapDrawable(Resources res, String filepath); 

https://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html#BitmapDrawable%28android.content.res.Resources,%20java.lang.String%29

+1

Merci, mais cela ne fonctionne pas. Je pouvais charger des images avec la méthode getIdentifier: int resId = getResources(). GetIdentifier ("com.myprogpkg: drawable /" + nomfichier_avec_ext, null, null); imgview.setImageResource (resId); – shkim

3

Je pense que vous allez avoir du mal à convaincre les utilisateurs d'installer un programme qui est 100 MB dans la mémoire interne de leurs téléphones. Il serait préférable de charger les images sur la carte SD. Il existe un certain nombre de services d'hébergement de fichiers assez bon marché tels que Amazon S3.

En outre, vous devriez envisager de permettre aux utilisateurs de télécharger les images en petits groupes plutôt qu'en un seul gros morceau.

2

Le G1 dispose de 256 Mo de mémoire interne pour les applications. Même sur le Nexus One, il n'y a que 512 Mo, donc je pense qu'il est peu probable que quelqu'un voudrait qu'une seule application occupe une si grande proportion de ce stockage, donc créer un fichier .apk de 100 Mo + ne sera pas pratique.

Vous avez raison de dire que les téléphones Android stock ne peuvent pas exécuter des applications à partir de la carte SD. (Il existe des firmwares personnalisés qui permettent cela, mais cela ne va pas vous aider car seulement une petite minorité d'utilisateurs les exécutent.)

Vous dites que vous ne pouvez pas exécuter un serveur web, mais malheureusement, je pense que c'est votre seul véritable option ici. Vous pouvez télécharger les images au besoin et les mettre en cache sur la carte SD si vous les avez sur un serveur Web quelque part. Configurer un serveur Web pour servir un ensemble d'images est assez simple, bien que vous ayez besoin de faire un peu de travail pour empêcher les gens de regarder les images en utilisant un navigateur Web plutôt que votre application si vous les chargez.

+0

J'ai pris quelques instants juste pour laisser couler après avoir lu * 256 Mo de stockage interne. * – camelCaseCoder

1
ImageView iv = new ImageView(context); 

iv.setImageResource(R.drawable.icon); 
0

Pour accéder à un large éventail d'images assis dans un répertoire sur la carte SD:

ImageView iv= ... 
    int imageIndex=0; //can access all image files by imageIndex, 0=first entry 

    List<String> ImageList=FindImages(); 
    if(ImageList!=null && ImageList.size()>=currentIndex){ 
     iv.setImageDrawable(Drawable.createFromPath(ImageList.get(imageIndex))); 
    } 

    //put your image files on SD in DIRECTORY 


    private List<String> FindImages() { 
    final List<String> tFileList = new ArrayList<String>(); 
    Resources resources = getResources(); 
    // may use array of valid image file extensions 
    //String[] imageTypes = ... 
    FilenameFilter[] filter = new FilenameFilter[imageTypes.length]; 

    int i = 0; 
    /* can use string array of image types: 
       for (final String type : imageTypes) { 
     filter[i] = new FilenameFilter() { 
      public boolean accept(File dir, String name) { 
       return name.endsWith("." + type); 
      } 
     }; 
     i++; 
    }*/ 
    filter[i] = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      return name.endsWith(".png"); 
     } 
    }; 
    FileUtils fileUtils = new FileUtils(); 
    File[] allMatchingFiles = fileUtils.listFilesAsArray(
      new File(DIRECTORY), filter, -1); 
    for (File f : allMatchingFiles) { 
     tFileList.add(f.getAbsolutePath()); 
    } 
    return tFileList; 
}