当我爬行 MediaStore 时,有些图像的高度和体重条目为空。
文件存在,我可以使用图像浏览器显示它们。
Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
mCursor.moveToFirst();
while(!mCursor.isAfterLast()) {
Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
mCursor.moveToNext();
}
mCursor.close();
}
09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: PIC PATH: /storage/emulated/0/Pictures/Instagram/IMG_20160813_221335.jpg
09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: WIDTH: null
09-12 18:17:30.861 13002-13002/com.google.observer D/DEBUG: HEGHT: null
该文件的尺寸为:3366*2988,我可以在文件浏览器中打开它。
编辑
我尝试使用列(请参阅 Pavneet Singh 的回答),但出现同样的错误。大多数图片都可以,只有少数有这个问题:
final String[] columns = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.WIDTH, MediaStore.Images.Media.HEIGHT, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.SIZE};
Cursor mCursor = _context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,columns,null,null,MediaStore.Images.Media.DEFAULT_SORT_ORDER);
if(mCursor != null){
mCursor.moveToFirst();
while(!mCursor.isAfterLast()) {
Log.d("DEBUG","PIC PATH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA)));
Log.d("DEBUG","WIDTH: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.WIDTH)));
Log.d("DEBUG","HEGHT: " + mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.HEIGHT)));
mCursor.moveToNext();
}
mCursor.close();
}
最佳答案
MediaStore
由于 docs 中提到的性能原因,不会自动返回所有列值。因此您需要显式地将投影传递给 MediaStore
查询。
final String[] columns = {
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.HEIGHT
};
Cursor mCursor = _context.getContentResolver().
query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
columns,null,null,
MediaStore.Images.Media.DEFAULT_SORT_ORDER);
有些人觉得它令人困惑,但它提高了性能,因为可能有太多与图像相关的细节,如日期、时间、标题、地点、纬度、经度等,如果查询针对存储的所有图像,这会降低性能(通常它可以是数千张图像),因此数据更少,时间更少,因此性能更好。
详细信息:某些图像可能没有所需的信息,可能来自其他应用程序或从某些网站下载等,因此请使用更新信息。
更新:您可以关注this解决少数有问题的图像的方法
关于android - MediaStore 图像宽度和高度 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454731/