2 votes

toutes les valeurs ExifInterface renvoient 0 ou null

J'essaie d'obtenir la localisation gps des images, mais tout ce que j'obtiens est null/0, j'ai essayé de récupérer d'autres informations exif de différentes images, mais les résultats sont toujours null/0.

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();
    }
}

Le premier toast montre le chemin absolu de l'image comme /storage/sdcard0/etp_images/test.jpg, mais le second toast n'affiche que 0 ou null comme résultats.

2voto

Kostya Bakay Points 702

Ce n'est probablement pas une solution, mais j'ai eu quelques problèmes avec ExifInterface avant. Classe originale ExifInterface a des bugs différents. Essayez d'utiliser la version de soutien de cette classe. Dans mon cas, cela a résolu mon problème. Compilez cette classe en utilisant Gradle : com.android.support:exifinterface:25.1.0

1voto

CookieMonster Points 1320

J'ai eu le même problème et j'ai ajouté la bibliothèque ExifInterface Support Library à mon projet avec la dépendance suivante :

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

et a également écrit les méthodes suivantes afin d'obtenir l'angle d'orientation de l'image :

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;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X