您的readImages方法有点过头了,AFAIK从手机内存加载照片的最佳做法如下:
private int imagesQuantity = 40;
private Context ctx;
private Cursor cursor;
private ArrayList<Bitmap> photos = new ArrayList<>(imagesQuantity);
private ArrayList<Uri> uris = new ArrayList<>(imagesQuantity);
private ArrayList<Bitmap> photos = new ArrayList<>(imagesQuantity);
如上所述使用位图声明arrayList,读取方法如下所示,您可以更改一些参数,如读取照片的顺序(我想在您的情况下,DESC=降序是最好的
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 = ctx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
null, MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC");
cursor.moveToFirst();
for (int i = 1; i <= imagesQuantity; i++) {
Bitmap bmp = BitmapFactory.decodeFile(cursor.getString(1));
Uri imageUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID)));
photos.add(bmp);
uris.add(imageUri);
cursor.moveToNext();
}
}