Android:ExifInterface数据null

时间:2016-05-12 13:32:13

标签: android exif

我试图从图库中提取Exif数据,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (data.getData() != null) {
        Uri uri = data.getData();
        String file = uri.getPath();

        try {

            ExifInterface exif = new ExifInterface(file);
            Integer property = exif.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 9); //is always 0
            Log.d("width", property.toString());
            String date = exif.getAttribute(ExifInterface.TAG_GPS_DATESTAMP); //is always null

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

但是所有值都是null或0。 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

String file = uri.getPath();

在大多数情况下这没用。最好的情况是,如果Uri具有file方案,则该路径将是对文件系统上文件的有效引用,但您可能无权访问它。对于任何其他方案来说,这将是完全无用的,并且大多数时候您将拥有content的方案。

您有两种选择:

  1. 使用不同的EXIF解析器,可以处理InputStream。在这种情况下,您可以使用ContentResolveropenInputStream()获取InputStream指向的内容Uri。 AOSP中Mms应用程序中的EXIF代码就是我用来实现的。

  2. 使用ContentResolveropenInputStream()获取InputStream指向的内容Uri。然后,使用Java I / O将这些字节复制到您控制的某个文件。然后,将您的ExifInterface代码与新创建的文件一起使用。