三星Galaxy S7显示设备照片旋转

时间:2016-10-13 00:10:32

标签: android galaxy mediastore

我开发了一个Android应用程序,在适配器中显示用户在其设备中拥有的所有照片。

这是我用来阅读照片的代码:

    Cursor photos;
    String pictureCols[] = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME };
    String order = Media.DATE_ADDED + " DESC";
    photos = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, pictureCols, null, null, order);
    photos.moveToFirst();
photosAdapter.addItems(photos);

在适配器内部,这是我用来显示它们的代码:

    public View getView(final int position, View convertView, ViewGroup parent)
{

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View gridView;
    if (convertView == null) {
        gridView = new View(context);
        gridView = inflater.inflate(R.layout.photo_item, null);
    }
    else
    {
        gridView = (View) convertView;
    }

    photoIV = (SquareImageView)gridView.findViewById(R.id.photo);

    long photoId = photos.getLong(0);
    String thumbURL = "file://"+photos.getString(1);
    String thumbCols[] = { MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA };
    Cursor thumbCursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(context.getContentResolver(), photoId, Thumbnails.MINI_KIND, thumbCols);
    if(thumbCursor.getCount() > 0) {
        thumbCursor.moveToFirst();
        thumbURL = "file://"+thumbCursor.getString(1);
    }
    thumbCursor.close();

    if(!thumbURL.equals(""))
    {
       mImageOptions = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .resetViewBeforeLoading(true)
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .build();

        ImageLoader.getInstance().displayImage(thumbURL, photoIV, mImageOptions);
   }

    return gridView;
}

此代码在我到目前为止测试过的所有设备上都运行正常,但是一些使用三星Galaxy S7的用户报告说他们的大部分照片都是旋转显示的。我在S7中找不到与此问题相关的任何文档。 S7是否更改了与此相关的内容?我应该以不同的方式阅读照片以获得正确的方向吗?这段代码已经在很多设备中使用了很长时间。

1 个答案:

答案 0 :(得分:2)

如果您使用图像加载库,并且您关心EXIF方向标题,请选择一个图像加载库,为您应用这些标题(例如,毕加索,至少对于本地图像)。这可能需要某种选择加入电话(例如,considerExifParams(true),根据您的评论)。

并非所有图片都有EXIF方向标题。这取决于它是照片,照片是什么样的相机硬件,拍摄照片的相机应用程序是否为您旋转图像等。