簡體   English   中英

獲取使用Android相機拍攝的最后一張圖像

[英]Get last image captured using camera on Android

我正在嘗試使用以下代碼獲取用戶使用相機應用程序捕獲的最后一張圖像,並在我的相機應用程序中將其顯示給用戶(就像其他相機應用程序一樣,在角落顯示最后一次捕獲的圖像的小預覽) :

String[] projection = new String[]{
                    MediaStore.Images.ImageColumns._ID,
                    MediaStore.Images.ImageColumns.DATA,
                    MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
                    MediaStore.Images.ImageColumns.DATE_TAKEN,
                    MediaStore.Images.ImageColumns.MIME_TYPE
            };
            final Cursor cursor = getContentResolver()
                    .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
                            null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");

            if (cursor.moveToFirst()) {
                Bitmap bm = BitmapFactory.decodeFile(cursor.getString(1));
                imagePreview.setImageBitmap(bm);
            }

但是代碼向我顯示了手機中任何地方的最后一張圖像,例如,如果我拍攝了屏幕截圖,那么它就會向我顯示。 我想顯示從DCIM文件夾或保留照片的文件夾中捕獲的最后一張圖像,而不是我下載或截圖的照片。 誰能幫我嗎?

可以肯定地返回所有android標准手機的Camera文件夾,否則要求用戶設置Camera文件夾。 您還可以提供更多條件來檢查...

String[] projection = new String[]{
        MediaStore.Images.ImageColumns._ID,
        MediaStore.Images.ImageColumns.DATA,
        MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
        MediaStore.Images.ImageColumns.DATE_TAKEN,
        MediaStore.Images.ImageColumns.MIME_TYPE};

Cursor cursor = getActivity().getContentResolver().query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        projection,
        null,
        null,
        MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
if(cursor != null){
    cursor.moveToFirst();
    while(cursor.moveToNext()){
        String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

        if(path.toUpperCase().contains("DCIM/CAMERA") || 
            path.toUpperCase().contains("DCIM/100ANDRO")|| 
            path.toUpperCase().contains("DCIM/100MEDIA")){

        Log.d(TAG,path);
        File file = new File(path);
        path = file.getParent();
        return path;
        }
        continue;
    }
    //cursor.close();
    return null;

沒有官方的觀察員。 拍攝媒體圖像后,您可能想使用FileWatcher或觀察者。 您將需要一個接收器,它可以監聽相機的鏡頭,然后向媒體存儲查詢最近更新的圖像。

// in the receivers class in onChange() 
Cursor cursor = context.getContentResolver().query(uri, null, null, null, "date_added DESC LIMIT 1");
Media media = null;
if (cursor.moveToNext()) {
     int dataColumn = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
     String filePath = cursor.getString(dataColumn);
 }

在cyanogenmod中,有一個Intent Filter標志(一直有效到現在)

 <receiver
        android:name="com.app.CameraEventReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="com.android.camera.NEW_PICTURE"/>
            <data android:mimeType="image/*"/>
        </intent-filter>
    </receiver> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM