2012-11-30 6 views
6

Ho un problema cercando di ottenere MediaScanner per la scansione di una sola directory.Invocare il MediaScanner in appena una singola directory (Android)

La mia app scatta le foto e le salva su sd-card/DCIM/AppPictures /, e ovviamente ho bisogno di invocare il MediaScanner per farle apparire nell'app gallery. Il seguente codice funziona per il mio scopo:

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

Ma sembra così sprecone! Non voglio usare le risorse cercando di scansionare l'intera SDcard quando so esattamente dove si trovano i file. Ho provato anche quanto segue:

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

Ma questo non riesce a dare alcun risultato. Qualcuno può PER FAVORE farmi sapere il modo giusto per farlo?

risposta

0

Nella mia app, sto anche scaricando le immagini.

Quando viene avviato la mia attività principale (che le immagini di download), ho iniziato una connessione MediaScanner. Il download è sequenziale, una volta che un quadro è arrivato, devo conservare il nome del file in una stringa (chiamato currentFile sotto) e "collega" lo scanner supporti:

public class SomeActivity 
      extends Activity implements MediaScannerConnectionClient { 

    .... 

    protected MediaScannerConnection mMs; 

    .... 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     .... 
     mMs = new MediaScannerConnection(this, this); 
     .... 
    } 

    @Override 
    public void onMediaScannerConnected() { 
     mMs.scanFile(currentFile, null); 
    } 

    @Override 
    public void onScanCompleted(String path, Uri uri) { 
     mMs.disconnect(); 
    } 


} 

Per avviare la scansione Io faccio solo:

currentFile = "/mnt/sdcard/someLocationToScan/somefile.jpg"; 
mMs.connect(); 
1
public static void ScanMyFile(String strFilePath) { 
    // Tell the media scanner so it is available to the user. 
    MediaScannerConnection.scanFile(null, new String[] { strFilePath }, null, 
      new MediaScannerConnection.OnScanCompletedListener() { 
       public void onScanCompleted(String path, Uri uri) { 
       } 
      }); 
} 
Problemi correlati