이 아니어야한다고 말한 파일을 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'.
그래서 분명히 내 애플 이미지/"보류"디렉토리에 동영상을 다운로드 할 수 DownloadManager를 알려줍니다. 그것은 말했듯이 "나는 다운로드를 완료했습니다"라는 브로드 캐스트를 보냅니다. 내 앱이 브로드 캐스트를 수신하고 전체 파일을 "media"디렉토리로 이동합니다. 잠시 후 MediaScanner (또는 다른 것)는 "보류"폴더에서 완료된 파일을 검사하고 시스템 로그에서 barfs를 검사하려고 시도합니다.
이제 궁금합니다. 왜 MediaScanner가 이러한 파일을 읽으려고합니까?
setDestinationUri의 안드로이드 API의 문서에 따르면 ".. 다운로드 한 파일이 MediaScanner에 의해 검색되지 않습니다하지만 allowScanningByMediaScanner()를 호출하여 스캔 할 할 수있다" 그 방법을 호출하지 않기 때문에 다운로드 한 파일을 검사해서는 안됩니다.
다음, 나는 앱의 cache directory의 빈 .ignore을 넣어 시도하고 ACTION_MEDIA_SCANNER_SCAN_FILE을 통해 .IGNORE 파일의 존재의 MediaScanner을 생각 나게하지만, 오류 메시지가 남아 있습니다.
신비에 추가하려면 파일이 시스템의 갤러리 또는 비디오 앱에 나타나지 않으므로 미디어 스캐너가 파일을 무시합니다. 하지만 여전히 : 왜 그렇게하지 않아도 읽으려고합니까? MediaScanner가 아니면 다른 시스템 서비스입니까?
죄송합니다. 나는 이것을 사용했다. 'ignore = new File (context.getExternalCacheDir(), MediaStore.MEDIA_IGNORE_FILENAME); ' 그래서 .nore는 .ignore가 아닌 .nomedia라는 파일이지만 여전히 작동하지 않는다. – hez