MediaScanner似乎想掃描我不告訴它的文件。現在我想知道爲什麼。DownloadManager在下載後運行MediaScanner,但不應該
我的應用程序從我的服務器下載幾個媒體文件,稍後用播放列表顯示它們。
爲此,該應用程序獲取Android系統的DownloadManager的媒體文件。
使用Request.setDestinationUri(),下載將被保存到名爲「pending」的子目錄getExternalCacheDir()。
當下載完成時,Android DownloadManager發送ACTION_DOWNLOAD_COMPLETE廣播。然後,我的應用程序的廣播監聽器將完成下載並將其從「待處理」文件夾移至另一個名爲「媒體」的文件夾。
所有這些都按預期工作。
然而,系統日誌已滿這樣的消息:
E/BitmapFactory(23779): Unable to decode stream: java.io.FileNotFoundException: /path/to/pending/image.jpg: open failed: ENOENT (No such file or directory)
E/JHEAD (23779): can't open '/path/to/pending/image.jpg'
E/StagefrightMetadataRetriever(25911): Unable to create data source for '/path/to/pending/video.mp4'.
E/MediaScannerJNI(23779): An error occurred while scanning file '/path/to/pending/video.mp4'.
所以很顯然,我的應用程序告訴下載管理器下載的圖像/到「待定」目錄中的視頻。它按照它的要求發送併發送「我完成了下載」廣播。我的應用程序接收到廣播並將完整的文件移動到「媒體」目錄。一段時間後,MediaScanner(或其他)嘗試掃描「待處理」文件夾中的完成文件和barfs到系統日誌中。
現在我想知道:爲什麼MediaScanner試圖讀取這些文件?
根據對setDestinationUri Android的API文檔:「下載的文件不被MediaScanner掃描但它可以通過調用allowScanningByMediaScanner()進行掃描的。」我不會調用該方法,因此不應掃描下載的文件。
接下來,我試圖把一個空.ignore在應用程序的cache directory,並通過ACTION_MEDIA_SCANNER_SCAN_FILE提醒.IGNORE文件的存在的MediaScanner,但錯誤信息仍然存在。
要增加神祕感,文件不會顯示在系統的圖庫或視頻應用程序中,所以是的,媒體掃描儀會忽略它們。但仍然:爲什麼它會在不需要時閱讀它們?完全是MediaScanner還是其他系統服務?
好的,對不起。我使用這個 'File ignore = new File(context.getExternalCacheDir(),MediaStore.MEDIA_IGNORE_FILENAME);' 因此它是一個名爲.nomedia,不是.ignore的文件 - 但仍然無效。 – hez