2017-02-21 21 views
2

Я пытаюсь получить местоположение gps изображений, но все, что у меня есть, равно нулю/0, я попытался извлечь другую информацию exif с разных изображений, но результаты по-прежнему остаются ничтожными/0все значение ExifInterface возвращает 0 или null

public void MarkGeoTagImage(String imagePath) 
{ 
    try { 
     ExifInterface exif = new ExifInterface(imagePath); 
Toast.makeText(MainActivity.this, imagePath, Toast.LENGTH_LONG).show(); 
     Toast.makeText(MainActivity.this, exif.getAttribute(ExifInterface.TAG_GPS_LONGITUDE),Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

Первый тост показывает абсолютный путь к изображению, как /storage/sdcard0/etp_images/test.jpg, но второй тоста показывает только 0 или NULL в качестве результатов.

+0

Пробуйте свой код с собственным изображением, имеющим долготу GPS. –

+0

Я сделал, и это не сработало. –

ответ

2

Возможно, это не решение, но у меня была некоторая проблема с ExifInterface. Исходный класс ExifInterface имеет разные ошибки. Попробуйте использовать версию поддержки этого класса. В моем случае это решило мою проблему. Компиляция это с помощью Gradle: com.android.support:exifinterface:25.1.0

+0

большое вам спасибо! Ваш метод действительно работает! Наконец –

+0

Добро пожаловать :) – Kostya

+0

Я работаю в android для xamarin. Я установил «библиотеку поддержки Exif», но по-прежнему сталкивался с этой ссылкой: https://www.nuget.org/packages/Xamarin.Android.Support.Exif/25.4.0.2, но у меня возникла проблема. –

1

я такая же проблема, поэтому я также добавил библиотеку поддержки ExifInterface для моего проекта со следующей зависимостью:

compile 'com.android.support:exifinterface:25.1.0' 

, а также написал следующие методы для того, чтобы получить угол ориентации изображения:

private int getImageAngle(Uri uri, String imagePath) { 
    int orientation; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     orientation = getOrientation(uri); 
    } else { 
     orientation = getOrientationLegacy(imagePath); 
    } 

    switch (orientation) { 
     case ExifInterface.ORIENTATION_ROTATE_90: 
      return 90; 
     case ExifInterface.ORIENTATION_ROTATE_180: 
      return 180; 
     case ExifInterface.ORIENTATION_ROTATE_270: 
      return 270; 
    } 

    return 0; 
} 

@TargetApi(Build.VERSION_CODES.N) 
private int getOrientation(Uri uri) { 
    InputStream in = null; 
    ExifInterface exif = null; 

    try { 
     in = getContentResolver().openInputStream(uri); 
     exif = new ExifInterface(in); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (IOException ignored) { 
      } 
     } 
    } 

    return getExifAttributeInt(exif); 
} 

private int getOrientationLegacy(String imagePath) { 
    ExifInterface exif = null; 
    try { 
     exif = new ExifInterface(imagePath); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return getExifAttributeInt(exif); 
} 

private int getExifAttributeInt(ExifInterface exif) { 
    if (exif != null) { 
     return exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
    } else { 
     return ExifInterface.ORIENTATION_NORMAL; 
    } 
}