2016-05-12 2 views
1

Я пытаюсь извлечь данные Exif, из изображения из галереи, например, так:Android: 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(); 
     } 

    } 

} 

Но все значения являются либо нуль или 0. Что такое правильный способ сделать Это?

ответ

1
String file = uri.getPath(); 

В большинстве случаев это бесполезно. В лучшем случае, если Uri имеет схему file, путь будет действительной ссылкой на файл в файловой системе, но у вас могут не быть прав на его доступ. Это будет абсолютно бесполезно для любой другой схемы, и большую часть времени у вас будет схема content.

У вас есть два варианта:

  1. Используйте другой EXIF ​​анализатор, который может обрабатывать InputStream. В этом случае вы можете использовать ContentResolver и openInputStream(), чтобы получить InputStream по содержанию, на которое указывает Uri. Код EXIF ​​в приложении Mms в AOSP - это то, что я использую для этого.

  2. Использование ContentResolver и openInputStream() получить InputStream на содержание, на которое указывает Uri. Затем используйте Java I/O для копирования этих байтов в файл, который вы контролируете. Затем используйте код ExifInterface с только что созданным файлом.

+0

Спасибо! Я скопировал эти байты в файл, и он работает! – Alterecho

 Смежные вопросы

  • Нет связанных вопросов^_^