我试图从图库中提取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。 这样做的正确方法是什么?
答案 0 :(得分:1)
String file = uri.getPath();
在大多数情况下这没用。最好的情况是,如果Uri
具有file
方案,则该路径将是对文件系统上文件的有效引用,但您可能无权访问它。对于任何其他方案来说,这将是完全无用的,并且大多数时候您将拥有content
的方案。
您有两种选择:
使用不同的EXIF解析器,可以处理InputStream
。在这种情况下,您可以使用ContentResolver
和openInputStream()
获取InputStream
指向的内容Uri
。 AOSP中Mms应用程序中的EXIF代码就是我用来实现的。
使用ContentResolver
和openInputStream()
获取InputStream
指向的内容Uri
。然后,使用Java I / O将这些字节复制到您控制的某个文件。然后,将您的ExifInterface
代码与新创建的文件一起使用。