简体   繁体   English

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

[英]Android: Images are stored at the end of the gallery

can somebody help me with this problem? 有人可以帮助我解决这个问题吗? I want that images are displayed at the beginning of the gallery. 我希望图像显示在图库的开头。 What have i to change in my code? 我需要在代码中进行哪些更改?

 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();
 }
MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription);

The former code will add the image at the end of the gallery. 前一个代码会将图像添加到图库的末尾。 If you want to modify the date so it appears at the beginning or any other metadata, see the code below (Cortesy of SK, samkirton): 如果要修改日期,使其显示在开头或任何其他元数据中,请参见下面的代码(SK提供,samkirton):

https://gist.github.com/samkirton/0242ba81d7ca00b475b9 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;
    }
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM