やりたいこと:
自分の PictureActivity* を使用して写真を撮り、EXIF (ジオタグ) データを追加する
*: 実装SurfaceHolder.Callback
して使用するCamera
何が機能していないか:
EXIF GPS データの追加
私が試したこと:および手動設定の使用(GPS メタデータを設定するための特定の方法と を使用した両方
) 。ExifInterface
Camera.Parameters
params.set(String, Value)
FlickrJ を使用して写真を Flickr にアップロードしています (はい、GPS データをインポートするように Flickr を設定しました。他の写真は問題なく動作します)。しかし、このツールは、EXIF に GPS データがないことも示しています: http://regex. info/exif.cgi
私は何が欠けていますか?
(Android 2.2、HTC デザイア)
編集:
- カメラは次のように設定されていGeotag photos: On
ます - ハードコードされたダミーの 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
ます