2011-02-24 2 views
3

을 촬영 한 후 파일을 검사 :강제 사용하여 사진을 촬영 한 후, API 레벨 4 (안드로이드 1.6)에 사진

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
File photo = new File(Environment.getExternalStorageDirectory(), "NewPic.jpg"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
imageUri = Uri.fromFile(photo); 
startActivityForResult(intent, TAKE_PICTURE); 

내 모든 사진의 축소 그림을보고 싶습니다,하지만 내 마지막 사진의 축소판이 없다 . 그것은 안드로이드 2.1에서 완벽하게 작동합니다.

USB를 통해 장치를 PC에 연결하면 스캔을 마친 후 연결이 끊어집니다. 그렇다면 색인 생성을 어떻게 시작해야합니까?

나는

mScanner = new MediaScannerConnection(getApplicationContext(), this); 
mScanner.connect(); 
mScanner.scanFile(imageUri.getEncodedPath(), "*/*"); 

을 시도 그리고이 끝납니다

02-24 17:13:54.678: DEBUG/MediaScannerService(1320): IMediaScannerService.scanFile: /sdcard/NewPic2222.jpg mimeType: */* 
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): /sdcard volume ID: 1149784819 
02-24 17:13:54.688: VERBOSE/MediaProvider(1320): key exists 

이 LATER

내가 다른 활동에 STH이 같은있어 편집을 할

mCursorThumbnails = MediaStore.Images.Thumbnails.queryMiniThumbnails(mContentResolver, MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, MediaStore.Images.Thumbnails.MINI_KIND, projection); 
mCursorImages = MediaStore.Images.Media.query(mContentResolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection); 

첫 번째 값의 수를 확인할 때 13 개의 요소가 있고 두 번째에는 14가 있습니다. 이미지가 mediascanner에 추가되었지만 OS가 축소판을 생성하지 않았습니다. 그렇다면 OS를 만들려면 어떻게해야합니까?

+0

\t onMediaScannerConnected()를받은 후에 scanFile을 호출합니까? – njzk2

답변

1

사진을 찍은 후 ContentResolver의 insert() 함수를 호출하여 사진에 대한 정보를 전달합니다.

public final Uri insert (Uri url, ContentValues values) 

실제로 사진을 데이터베이스에 추가하고 그림 축소판 이미지를 만듭니다. 또한 미리보기 이미지 데이터베이스에 추가됩니다. 희망이 도움이!

getContentResolver().delete(uriOfMediaFileDeteled, null, null) 

이 주요 장점 : 어떤 MIME 타입과 작업 지원이 삭제, 사용을 위해

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(mediaFileAdded))); 

사용에 대한

+0

유망 해 보입니다. 이미 해킹을했기 때문에 작동하는지 확인할 수는 없지만 나중에 사용해 보겠습니다. – Mikooos

+0

당신은 참조를 위해 안드로이드 카메라 애플 리케이션 소스 코드를 확인할 수 있습니다. 특히 ImageManager :: addImage() 함수. – artsylar

+1

이미지를 추가하려면 어떻게해야합니까? – MEX

6

사용이 코드 :

public static void scanFile(Context context, String path, String mimeType) { 
    Client client = new Client(path, mimeType); 
    MediaScannerConnection connection = 
      new MediaScannerConnection(context, client); 
    client.connection = connection; 
    connection.connect(); 
} 

private static final class Client implements MediaScannerConnectionClient { 
    private final String path; 
    private final String mimeType; 
    MediaScannerConnection connection; 

    public Client(String path, String mimeType) { 
     this.path = path; 
     this.mimeType = mimeType; 
    } 

    @Override 
    public void onMediaScannerConnected() { 
     connection.scanFile(path, mimeType); 
    } 

    @Override 
    public void onScanCompleted(String path, Uri uri) { 
     connection.disconnect(); 
    } 
} 

가 그럼 그냥 scanFile(imageUri.getPath(), null)를 호출합니다.

null 값으로 인해 MIME 유형이 자동으로 결정되므로 인코딩 된 경로를 사용하지 말고 "*/*"을 MIME 유형으로 사용하지 마십시오.

MediaStore.Images.Thumbnails.getThumbnail(ContentResolver cr, long origId, int kind, BitmapFactory.Options options) 

+0

나는 MediaScanner의 사용이 문제가 아니라고 생각합니다. 나는 더 많은 정보로 첫 번째 게시물을 편집했습니다. – Mikooos

+0

살인자 .. 자세한 정보를 위해 고맙습니다 :) – cV2

0

를 사용하여 이미지의 썸네일의 생성을 강제로.

+0

레벨 8이 필요합니다 – Mikooos

+0

지금 하시겠습니까? (실제로는이 문제에 대해서는 여전히 사용할 수없는 레벨 5가 필요합니다.) – njzk2

8

당신이에게 파일을 추가 때마다, 미디어 스토어 MediaStore 컨텐트 제공자가 알고하자 MediaStore 제공

귀하의 경우에는 onActivityResultMetho d (즉) 사진을 성공적으로 찍은 후

+0

그레이트 솔루션! 이것은 받아 들여진 대답이어야합니다. 간단하고 작동합니다. – Muzikant

관련 문제