Запись/геотег JPEG (данные EXIF) в Android

Что я хочу сделать:
Сделайте снимок, используя мою собственную PictureActivity*, и добавьте данные EXIF ​​(геотеги)
*: Реализация SurfaceHolder.Callbackи использование Камера

Что не работает:
Добавление данных EXIF ​​GPS

Что я пробовал:
Используя ExifInterfaceи ручную установку Camera.Parameters(как с помощью специальных методов для установки метаданных GPS, так и с помощью params.set(String, Value)).

Я загружаю изображения на Flickr с помощью FlickrJ (да, я настроил Flickr для импорта данных GPS — другие изображения работают нормально), однако этот инструмент также сообщает об отсутствии данных GPS в EXIF: http://regex.info/exif.cgi

Что я упустил?

(Android 2.2, HTC Desire)

Изменить:
- Камера настроена на Фотографии с геотегами: Вкл.
- Я пробовал с жестко закодированными фиктивными позициями GPS

Вот код для ручной настройки параметров (пробовал как с предварительным удалением данных GPS, так и без него, и как упоминалось также с set(String, Value)):

@Override
public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();    

    Camera.Parameters p = mCamera.getParameters();
    p.setPreviewSize(p.getPreviewSize().width, p.getPreviewSize().height);
    Log.e("PictureActivity", "EXIF: "+AGlanceLocationListener.getLatitude());
    p.removeGpsData();
    p.setGpsLatitude( AGlanceLocationListener.getLatitude() );
    p.setGpsLongitude( AGlanceLocationListener.getLongitude() );
    p.setGpsAltitude( AGlanceLocationListener.getAltitude() );
    p.setGpsTimestamp( AGlanceLocationListener.getTime() );
    mCamera.setParameters(p);
}

Вот код для использования ExifInterface:

//Save EXIF location data to JPEG
ExifInterface exif;
try {
    exif = new ExifInterface("/sdcard/DCIM/"+filename+".jpeg");
    exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,
        String.valueOf(AGlanceLocationListener.getLatitude()));

    exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, 
        String.valueOf(AGlanceLocationListener.getLongitude()));

    exif.saveAttributes();

} catch (IOException e) {
    Log.e("PictureActivity", e.getLocalizedMessage());
}

Вот код для записи файла JPEG в SDCARD:

Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] imageData, Camera c) 
    {
        //      Bitmap pic = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

        String day = String.valueOf(Calendar.getInstance().getTime().getDay());
        String hour = String.valueOf(Calendar.getInstance().getTime().getHours());
        String minute = String.valueOf(Calendar.getInstance().getTime().getMinutes());
        String second = String.valueOf(Calendar.getInstance().getTime().getSeconds());

        filename = "Billede"+day+hour+minute+second;

        try {
            FileOutputStream fos = new FileOutputStream(new File("/sdcard/DCIM/"+filename+".jpeg"));
            fos.write(imageData);
            fos.flush();
            fos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        if(imageData != null){
            Intent mIntent = new Intent();
            setResult(0,mIntent);
            PictureActivity.this.showDialog(0);
        }
    }
};

Также пытался записать образ из Bitmap(не сработало), плюс еще один вопрос: запись отчета с использованием FileOutputStreamсработала

10
задан MSurrow 10 May 2012 в 10:51
поделиться