1

特定の場所でインテントACTION_IMAGE_CAPTUREを使用して写真を撮った後、一部のデバイス (私のテスト デバイスは Android 2.3 の Sony Ericsson Mt11i です) で写真を保存すると、デフォルトのカメラ アプリがカメラの写真フォルダーに重複した画像を保存します。

そのため、私のアプリは写真が重複しているかどうかを確認して削除します。しかし、カメラアプリは撮影した写真のサムネイルも保存しているので、それも削除していますが、このサムネイルを削除した後でも、このサムネイルに関する情報がどこかに残っており、デバイスのギャラリーアプリの画像にはデフォルトの画像が残っています。この画像の詳細を確認すると、まだこの写真の情報 (日付、場所) があります。これらは、複製された写真を処理するための私の方法です:

public static void handleTakenPicture(Context context, int lastId, File tempFile) {
    /*
     * Checking for duplicate images
     * This is necessary because some camera implementation not only save where you want them to save but also in their default location.
     */
    if (lastId == 0)
        return;
    final String[] projection = {MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN,
            MediaStore.Images.ImageColumns.SIZE, MediaStore.Images.ImageColumns._ID};
    final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
    final String imageWhere = MediaStore.Images.Media._ID + ">?";
    final String[] imageArguments = {Integer.toString(lastId)};
    Cursor imageCursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, imageWhere, imageArguments,
            imageOrderBy);
   // List<File> cameraTakenMediaFiles = new ArrayList<File>();
    File gFile = null;
    if (imageCursor.getCount() > 0) {
       // while( imageCursor.moveToNext() ) {
        imageCursor.moveToFirst();
            // int id =
            // imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
            String path = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
            gFile = new File(path);
            // Long takenTimeStamp =
            // imageCursor.getLong(imageCursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));
            // Long size =
            // imageCursor.getLong(imageCursor.getColumnIndex(MediaStore.Images.Media.SIZE));
           // cameraTakenMediaFiles.add(new File(path));
        //}
    }

    imageCursor.close();


    //File imageFile = new File(imageFilePath);


    if (!tempFile.exists() && gFile != null) {
        // was not saved where I wanted, but the camera saved one in the media folder
        // try to copy over the one saved by the camera and then delete
        try {
            Prefsy.copyFile(gFile, tempFile);
            gFile.delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if(gFile != null)
        {
        gFile.delete();
        try { // DELETING THUMBNAIL
            Cursor th = context.getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, new String[] {MediaStore.Images.ImageColumns.DATA},
                    MediaStore.Images.Thumbnails.IMAGE_ID + " = ?", new String[] {"" + lastId}, MediaStore.Images.Thumbnails._ID + " DESC");

            L(th.getCount()+"");

            if (th.getCount() > 0)
            {
                th.moveToFirst();
                L(th.getString(0));
                L(new File(th.getString(0)).delete()+"");
                L(context.getContentResolver().delete(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
                        MediaStore.Images.Thumbnails.IMAGE_ID + " = ?", new String[] {"" + lastId})+"");
            }
            th.close();
        } catch (Exception e) {
        }

        }
    /*for( File cameraTakenFile : cameraTakenMediaFiles ) {
        // delete the one duplicated
        cameraTakenFile.delete();
    }*/
}

public static int getLastImageId(Context context){
    final String[] imageColumns = { MediaStore.Images.Media._ID };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    final String imageWhere = null;
    final String[] imageArguments = null;
    Cursor imageCursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, imageWhere, imageArguments, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}

L() は Log メソッド

4

0 に答える 0