Tôi đã tìm thấy nó tốt nhất (nhanh hơn/ít nhất trên đầu) để chạy trình quét phương tiện trên một tệp cụ thể (so với chạy nó để quét tất cả các tệp cho phương tiện), nếu bạn biết tên tệp. Dưới đây là phương pháp tôi sử dụng:
/**
* 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);
}
Khi cần để chạy trên nhiều file (chẳng hạn như khi khởi tạo một ứng dụng với nhiều hình ảnh), tôi giữ một bộ sưu tập của tên tập tin hình ảnh mới khi khởi tạo, và sau đó chạy các phương pháp trên cho mỗi tệp hình ảnh mới. Trong mã bên dưới, hãy thêm addToScanList
các tệp để quét vào ArrayList<T>
và scanMediaFiles
được sử dụng để bắt đầu quét cho từng tệp trong mảng.
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");
}
}
ya cảm ơn, tôi hy vọng điều này sẽ giúp tôi rất nhiều tôi sẽ thử với mã này. – user1806231
rất tốt +1 cho điều này, tôi sẽ sử dụng nó và đưa ra phản hồi, tôi sẽ sử dụng với các tệp nhạc và danh sách phát – Ahmed