2016-05-12 67 views
1

我试图提取Exif数据中,从图像的画廊,像这样:安卓:ExifInterface数据空

@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
String file = uri.getPath(); 

这在大多数情况下是无用的。充其量,如果Urifile方案,路径将是对文件系统上文件的有效引用,但您可能没有权限访问它。对于任何其他计划来说,这将是完全没有用的,并且大多数时候您将有一个content的计划。

你有两个选择:

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

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

+0

谢谢!我将这些字节复制到一个文件,它的工作原理! – Alterecho