Android: ExifInterface 数据为空

Android: ExifInterface data null

我正在尝试从画廊的图像中提取 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();
        }

    }

}

但所有值要么为空,要么为 0。 正确的做法是什么?

String file = uri.getPath();

这在大多数情况下是没有用的。充其量,如果 Uri 有一个 file 方案,该路径将是对文件系统上文件的有效引用,但您可能无权访问它。它对任何其他方案都将完全无用,而且大多数时候你会有一个 content.

的方案

您有两个选择:

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

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