비디오영상에서 썸네일을 추출하여 비트맵으로 옮기는게
ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND)
를 사용하면 간편하게 가져올 수 있는데요.
이렇게 가져온 썸네일은 recycle해도 메모리가 사라지지 않네요.
커스텀 어뎁터를 구현하여 리스트뷰에 썸네일을 뿌려주는데 getView를 호출할 때마다 자꾸 그려줘야하는데요.
heap에 메모리가 계속해서 쌓이게 됩니다.
다른 방법으로 썸네일을 가져오려고 하는데 잘 안되네요...
Cursor를 사용해서 가져오려 하는데 Cursor가 자꾸 null이 뜹니다.
뭔가를 잘못 한 걸까요.
Uri uri = Uri.parse(filePath);
//String[] proj = {BaseColumns._ID};
//String[] proj = {MediaStore.Video.Media._ID};
String[] proj = {MediaStore.Video.Thumbnails._ID};
ContentResolver cr = mContext.getContentResolver();
//Cursor thumbCursor = cr.query(uri, proj, null, null, null);
Cursor thumbCursor = ((Activity) mContext).managedQuery(uri, proj, null, null, null);
if(thumbCursor == null){
System.out.println("커서가 널이네");
}
커서가 자꾸 null값입니다..
고수분들의 작은 의견 부탁드립니다 ㅠㅠ
우선 답변 감사드립니다.
MediaStore.Video.Thumbnails.getThumbnail()를 쓰려면 인자값으로 넘기는 것 중 long origId 가 있는데요.
이를 구하려면 커서를 이용해서 위의 소스를 적용 후 사용해야 하는걸로 알고있습니다.
소스 나머지 부분이
int id = thumbCursor.getColumnIndex(MediaStore.Video.Media._ID);
Bitmap bm = MediaStore.Video.Thumbnails.getThumbnail(cr, videoId, MediaStore.Video.Thumbnails.MINI_KIND, options);
이 부분인데요. videoId 부분에 들어가야할 Id를 구하는 방법을 잘 모르겠네요. 저게 맞는지...
저렇게 구하려고해도 Cursor가 null 값이 나와서 구현이 되질 않습니다 ㅠㅠ
우선 managedCursor는 사용하지 마세요. 쓰레드 문제로 사용하지말라고 권고중인 메쏘드입니다.
This method is deprecated. Use CursorLoader instead. |
우선 내부 DB의 URI 쓰는 방법보셔야 할듯합니다.
filepath가 URI로 되는 것이 아닌거든요.
정보게시판에서 'URI 따라가기' 라는 제글을 먼저 읽어 보시고, 다시 질문하시는 것이 좋을듯합니다.




managedQuery는 file의 uri를 넣는게 아니라 content uri를 넣어야 합니다.
MediaStore.Video.Thumbnails.getThumbnail()함수를 보세요,