안녕하세요.. 질문이 있습니다.
갤러리 app에 있는 사진을 복사 하는 기능을 만들었습니다. (File Stream이용)
미디어 스캔을 수동으로 실행하면 App에서 UI Update까지 깔끔하게 끝나지만..다른 방법을 사용하고 싶어서요..
질문이..
File Copy는 제대로 되는데..미디어 DB가 생성이 안됩니다. 직접 파일 URI로부터 정보를 읽어와서 DB에 써야 하는지요?
미디어 스캔을 사용하지 않고.. Update를 하는 좋은 방법이 있을까요?
검색은 해보았는데..어느것이 맞는 방법인지 도통 몰라서요. 답변 부탁드립니다.
Gallery app이란게 직접 만드신 App이신지, 기본 App인지는 잘모르겠습니다만,
일단 이건 나중에 생각하고, DB에 직접 올리는 방법은 있습니다.
final ContentResolver cr = context.getContentResolver();
cr.insert(url, Images.Media.EXTERNAL_CONTENT_URI);
머 이런식으로요. uri에 복사한 이미지의 uri가 들어가면 되겠죠.
다만, 기본 Gallery app의 경우, 이런식으로 해도, 아마 갱신이 안될 수도 있습니다.
예전에 Gallery 쪽 작업한 기억이 가물가물하긴 한데, MediaScan의 경우,
BroadCastReceiver로 받아와서 갱신하는데,
ContentResolver로 DB만을 갱신했을 경우, 내부 Cache를 ContentObserver로 보고 있다가 갱신해야하는데,
이게 되어있는지 안되어있는지는 기억이 안나네요. 제 기억으로는 안되는 경우도 있었던 것 같습니다.
그리고 미디어 스캔시에 각 제조사별로 다르지만, 프레임워크 내부에서 하는일이 제법 있습니다. 이런 걸 무시하기도 애매한 사항이구요.
미디어스캔이 제일 탈이 없고 깔끔한 방법이긴 한데,
수천장 복사라... 이 경우에는 어떤 방법을 쓰더라도, 속도 문제가 발생할 수 밖에 없습니다.
이런 경우는, 사용자도 어느정도 인식을 하고 있기 때문에, 프로그레스 팝업 같은 것을
띄워준다거나 해서 무마합니다.




파일 복사의 경우라는 복사된 파일의 경로만 업데이트 해주시면 되니
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE 으로 쓰시면 될 것 같습니다만.ㅎㅎ