2013-08-06 17 views
6

Sto creando un file manager in cui gli elementi immagine hanno una piccola miniatura.L'anteprima non viene aggiornata immediatamente

Ottengo un'immagine in miniatura utilizzando MediaStore. Tutto funziona bene Ma quando rinominare o spostare un file, la miniatura non viene visualizzata.

ho trovato un pezzo di codice per aggiornare MediaStore:

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

ha funzionato, ma devo aspettare 4 o 5 secondi e aggiornare, quindi gli aggiornamenti in miniatura.

Come ottenere l'anteprima dell'immagine immediatamente dopo la rinomina o lo spostamento?

+0

immettetelo in una discussione ......... – Exceptional

risposta

0

Hai provato a eseguire la scansione direttamente nella directory che stai modificando? Così, invece di

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

qualcosa come

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

Un'alternativa sarebbe quella di utilizzare manualmente ThumbnailUtils.

2

Cosa succede se si utilizza ACTION_MEDIA_SCANNER_SCAN_FILE anziché ACTION_MEDIA_MOUNTED (ad esempio, si attiva un aggiornamento per un singolo file anziché per la gerarchia di directory completa)?

Sarà necessario sostituire l'URI della directory con l'URI del file, ottenuto ad esempio utilizzando Uri.fromFile().

Quando si sposta o si rinomina un file, è necessario aggiornare il vecchio e il nuovo URI.

1

Il modo consigliato per aggiornare un'immagine specifica in Android è l'utilizzo di intento ACTION_MEDIA_SCANNER_SCAN_FILE. E per una maggiore fluidità

Puoi controllare su Basic Photo Handling Training nel sito per sviluppatori Android.

private void galleryAddPic() { 
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    File f = new File(mCurrentPhotoPath); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    this.sendBroadcast(mediaScanIntent); 
} 

Se si desidera mostrare immediatamente una nuova miniatura per alcuni file mancanti, è possibile farlo da soli. Innanzitutto, controlla il MediaStore come prima, e se la miniatura restituita è nulla, creane la tua usando ThumbnailUtils o BitmapFactory.

E, per gestire una bitmap e visualizzarla, c'è un tranquillo straightforward sample nel corso di formazione Android.