2010-11-11 12 views
7

Existe-t-il un bon moyen d'ajouter de nouvelles ressources d'image (à partir de la carte SD) à un widget galerie lors de l'exécution?ajouter dynamiquement des images au widget galerie

+0

Etes-vous en train d'analyser un site et souhaitez ajouter dynamiquement des images? –

+0

Pas tout à fait, seulement à partir d'une carte SD. – eyecreate

Répondre

25

"nouvelles ressources d'image"?

Les ressources d'image font partie du dossier/res/drawable dans votre package d'application .apk. Vous ne pouvez pas ajouter de "nouvelles" ressources d'image pendant l'exécution.

Y a-t-il un autre cas d'utilisation que vous aviez en tête?

Edité après affiches explication:

Vous devez ajouter des fichiers multimédia à Media Store afin d'être vu par un widget galerie. Utilisez MediaScanner. J'utilise cette enveloppe pratique dans mon code:

public class MediaScannerWrapper implements 
MediaScannerConnection.MediaScannerConnectionClient { 
    private MediaScannerConnection mConnection; 
    private String mPath; 
    private String mMimeType; 

    // filePath - where to scan; 
    // mime type of media to scan i.e. "image/jpeg". 
    // use "*/*" for any media 
    public MediaScannerWrapper(Context ctx, String filePath, String mime){ 
     mPath = filePath; 
     mMimeType = mime; 
     mConnection = new MediaScannerConnection(ctx, this); 
    } 

    // do the scanning 
    public void scan() { 
     mConnection.connect(); 
    } 

    // start the scan when scanner is ready 
    public void onMediaScannerConnected() { 
     mConnection.scanFile(mPath, mMimeType); 
     Log.w("MediaScannerWrapper", "media file scanned: " + mPath); 
    } 

    public void onScanCompleted(String path, Uri uri) { 
     // when scan is completes, update media file tags 
    } 
} 

Puis instancier MediaScannerWrapper et commencer avec scan(). Vous pourriez le modifier pour gérer plus d'un fichier à la fois. Conseil: passez la liste des chemins d'accès aux fichiers, puis bouclez mConnection.scanFile.

+0

oui, je parle d'images stockées sur le stockage externe. – eyecreate

+0

Alors, comment cela se connecte-t-il à un widget de galerie à afficher? – eyecreate

+0

Le widget Galerie affiche tous les fichiers ajoutés à Media Store. –

1

Envoyer une diffusion à MediaStore Content Provider lorsque vous ajoutez un fichier

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageAdded))); 

de travail des appareils avant de KitKat

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
       Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

ont également un oeil à this

Travailler dans Lolipop et devrait également résoudre les problèmes de kitkat.

ContentValues values = new ContentValues(); 
values.put(MediaStore.Images.Media.DATA,"file path"); 
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpeg"); 
mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values); 

Ajouter Autorisation.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
Questions connexes