12

ich bin neu in android. Ich möchte den Medienscanner ausführen, während das Bild aufgenommen wird. Nach dem Erfassen wird das Bild in der Rasteransicht aktualisiert. Dafür muss ich einen Medienscanner laufen lassen. Ich fand zwei Lösungen zu laufen Medienscanner man ist die Sendung Ereignis und andere ist läuft Medium Scanner-Klasse. Ich denke, in Ice Cream Sandwich (4.0) Medien-Scanner-Klasse eingeführt wird.Vor den Versionen müssen Broadcast-Event für den laufenden Medien-Scanner eingestellt werden.wie medien scanner in android

kann mir jemand sagen, wie man den Medienscanner korrekt betreibt.

Antwort

23

Ich habe es am besten (schneller/am wenigsten Overhead) gefunden, Medienscanner für eine bestimmte Datei auszuführen (im Gegensatz zum Ausführen, um alle Dateien nach Medien zu durchsuchen), wenn Sie den Dateinamen kennen. Hier ist die Methode, die ich verwende:

/** 
* Sends a broadcast to have the media scanner scan a file 
* 
* @param path 
*   the file to scan 
*/ 
private void scanMedia(String path) { 
    File file = new File(path); 
    Uri uri = Uri.fromFile(file); 
    Intent scanFileIntent = new Intent(
      Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri); 
    sendBroadcast(scanFileIntent); 
} 

Wenn auf mehreren Dateien auszuführen, um (wie wenn eine App mit mehreren Bildern zu initialisieren), halte ich eine Sammlung von den neuen Bildern Dateinamen während der Initialisierung und dann das obige Verfahren ausgeführt für jede neue Bilddatei. In dem folgenden Code fügt addToScanList die zu scannenden Dateien zu ArrayList<T> hinzu, und scanMediaFiles wird verwandt, um einen Scan für jede Datei in dem Array zu initiieren.

private ArrayList<String> mFilesToScan; 

/** 
* Adds to the list of paths to scan when a media scan is started. 
* 
* @see {@link #scanMediaFiles()} 
* @param path 
*/ 
private void addToScanList(String path) { 
    if (mFilesToScan == null) 
     mFilesToScan = new ArrayList<String>(); 
    mFilesToScan.add(path); 
} 

/** 
* Initiates a media scan of each of the files added to the scan list. 
* 
* @see {@see #addToScanList(String)} 
*/ 
private void scanMediaFiles() { 
    if ((mFilesToScan != null) && (!mFilesToScan.isEmpty())) { 
     for (String path : mFilesToScan) { 
      scanMedia(path); 
     } 
     mFilesToScan.clear(); 
    } else { 
     Log.e(TAG, "Media scan requested when nothing to scan"); 
    } 
} 
+0

ya danke, ich hoffe, das wird mir helfen, ich werde mit diesem Code versuchen. – user1806231

+0

sehr gut +1 dafür, ich werde es verwenden und Feedback geben, werde ich mit Musikdateien und Wiedergabelisten verwenden – Ahmed

Verwandte Themen