Android:图片存储在图库的末尾

时间:2017-10-22 14:05:33

标签: java android image gallery mediastore

有人可以帮我解决这个问题吗? 我希望图片显示在图库的开头。 我的代码有什么变化?

 OutputStream fOut = null;
 try {   
   String path = getFilesDir().getPath();
   File file = new File(path, "LT-IMG-"+ts+".jpg"); 
   fOut = new FileOutputStream(file);
   Bitmap bitmap = ((BitmapDrawable)photoView.getDrawable()).getBitmap();
   bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
   fOut.flush();
   fOut.close(); 

   MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());

 } catch (IOException ex) {
   ex.printStackTrace();
 }

1 个答案:

答案 0 :(得分:0)

MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription);

以前的代码会在图库的末尾添加图片。如果您想修改日期,使其显示在开头或任何其他元数据,请参阅下面的代码(S-K的Cortesy,samkirton):

https://gist.github.com/samkirton/0242ba81d7ca00b475b9

/**
* Android internals have been modified to store images in the media 
folder with * the correct date meta data * @author samuelkirton*/
public class CapturePhotoUtils {

/**
 * A copy of the Android internals  insertImage method, this method populates the 
 * meta data with DATE_ADDED and DATE_TAKEN. This fixes a common problem where media 
 * that is inserted manually gets saved at the end of the gallery (because date is not populated).
 * @see android.provider.MediaStore.Images.Media#insertImage(ContentResolver, Bitmap, String, String)
 */
public static final String insertImage(ContentResolver cr, 
        Bitmap source, 
        String title, 
        String description) {

    ContentValues values = new ContentValues();
    values.put(Images.Media.TITLE, title);
    values.put(Images.Media.DISPLAY_NAME, title);
    values.put(Images.Media.DESCRIPTION, description);
    values.put(Images.Media.MIME_TYPE, "image/jpeg");
    // Add the date meta data to ensure the image is added at the front of the gallery
    values.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
    values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis());

    Uri url = null;
    String stringUrl = null;    /* value to be returned */

    try {
        url = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

        if (source != null) {
            OutputStream imageOut = cr.openOutputStream(url);
            try {
                source.compress(Bitmap.CompressFormat.JPEG, 50, imageOut);
            } finally {
                imageOut.close();
            }

            long id = ContentUris.parseId(url);
            // Wait until MINI_KIND thumbnail is generated.
            Bitmap miniThumb = Images.Thumbnails.getThumbnail(cr, id, Images.Thumbnails.MINI_KIND, null);
            // This is for backward compatibility.
            storeThumbnail(cr, miniThumb, id, 50F, 50F,Images.Thumbnails.MICRO_KIND);
        } else {
            cr.delete(url, null, null);
            url = null;
        }
    } catch (Exception e) {
        if (url != null) {
            cr.delete(url, null, null);
            url = null;
        }
    }

    if (url != null) {
        stringUrl = url.toString();
    }

    return stringUrl;
}

/**
 * A copy of the Android internals StoreThumbnail method, it used with the insertImage to
 * populate the android.provider.MediaStore.Images.Media#insertImage with all the correct
 * meta data. The StoreThumbnail method is private so it must be duplicated here.
 * @see android.provider.MediaStore.Images.Media (StoreThumbnail private method)
 */
private static final Bitmap storeThumbnail(
        ContentResolver cr,
        Bitmap source,
        long id,
        float width, 
        float height,
        int kind) {

    // create the matrix to scale it
    Matrix matrix = new Matrix();

    float scaleX = width / source.getWidth();
    float scaleY = height / source.getHeight();

    matrix.setScale(scaleX, scaleY);

    Bitmap thumb = Bitmap.createBitmap(source, 0, 0,
        source.getWidth(),
        source.getHeight(), matrix,
        true
    );

    ContentValues values = new ContentValues(4);
    values.put(Images.Thumbnails.KIND,kind);
    values.put(Images.Thumbnails.IMAGE_ID,(int)id);
    values.put(Images.Thumbnails.HEIGHT,thumb.getHeight());
    values.put(Images.Thumbnails.WIDTH,thumb.getWidth());

    Uri url = cr.insert(Images.Thumbnails.EXTERNAL_CONTENT_URI, values);

    try {
        OutputStream thumbOut = cr.openOutputStream(url);
        thumb.compress(Bitmap.CompressFormat.JPEG, 100, thumbOut);
        thumbOut.close();
        return thumb;
    } catch (FileNotFoundException ex) {
        return null;
    } catch (IOException ex) {
        return null;
    }
}
}