Как написать exif данные для изображения в Android?

Я пытаюсь записать User_Comment и TAG_GPS на захваченное изображение в приложении Android, используя интерфейс exif, но по какой-то причине теги, кажется, не добавляются к изображению, когда я просматриваю Детали изображения в галерее.

Кажется, что теги не записываются на захваченное изображение, поскольку путь к файлу может быть неправильным. Я думаю, это может быть потому, что я написал теги к неправильному пути к изображению.

Кто-нибудь знает, есть ли проблема с тем, как я пишу теги к изображению?

Это код, который сохраняет данные exif после следующих изменений @Charlie:

private File getOutputPhotoFile() throws IOException {
          File directory = new File(Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_PICTURES), getPackageName());
          if (!directory.exists()) {
            if (!directory.mkdirs()) {
              Log.e(TAG, "Failed to create storage directory.");
              return null;
            }
          }


          String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());

          File[] files = directory.listFiles();

          File exifVar =  new File(directory.getPath(), "IMG_" + timeStamp + ".jpg");
          if(files.length!=0) {
              File newestFile = files[files.length-1];
              exifVar =  new File(directory.getPath() + File.separator + newestFile.getName());
          }

          String mString = "Generic Text..";     
          ExifInterface exif = new ExifInterface(exifVar.getAbsolutePath());
          exif.setAttribute("UserComment", mString);
          exif.saveAttributes();


          exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,
            String.valueOf(latituteField.toString()));

          exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, 
            String.valueOf(longitudeField.toString()));

          exif.saveAttributes();

          return exifVar; 




    }

Ответ 1

Вы используете exifVar.toString(). Это возвращает только имя файла, а не путь к изображению. Поскольку ваше приложение, вероятно, не находится в папке с картинками, вы должны использовать exifVar.getAbsolutePath().

Если вы не снимаете изображение одновременно с запуском программы, путь будет неправильным. Вместо этого используйте этот код:

File[] files = directory.listFiles();

if(files.length==0) {
    // No images available
    return;
}

File newestFile = files[files.length-1];

File exifVar =  new File(directory.getPath() + File.separator + newestFile.getName());

Off-Topic:

В соответствии с вашим огромным списком импорта:

import android.content.*;

Импорт

android.content.Context,
android.content.DialogInterface and
android.content.Intent

Это делает ваш код немного короче. Просто говоря

Ответ 2

Вам нужно сначала скопировать файлы exif, расположенные здесь google exif в ваш проект, а затем использовать следующий код:

ExifInterface exif = new ExifInterface();
exifi.readExif(exifVar.getAbsolutePath());
exif.setTagValue(ExifInterface.TAG_USER_COMMENT, mString);
exif.forceRewriteExif(exifVar.getAbsolutePath())); 

ExifInterface, используемый здесь, - это новый, который вы только что добавили.