私のアプリケーションで撮影した画像のEXIFヘッダーにGoogleの位置情報を追加しようとしています。これまでのところ、fused location providerを使って位置を取得し、MainActivityでそれをトーストすることができました。しかし、スレッドで撮影した画像のEXIFヘッダーに位置データを書き込もうとすると、そこにLocationオブジェクトを取得できません。それは'Cannot resolve symbol 'location'
を示しています。どんな助けもありがとうございます。シンボルを解決できません。画像のEXIFに位置情報を追加できません。
MainActivity.java
private TestThread myThread;
private FusedLocationProviderClient mFusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
System.loadLibrary("NativeImageProcessor");
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
// ...
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Toast.makeText(MainActivity.this, "Latitude:" + latitude+", Longitude:"+longitude,Toast.LENGTH_SHORT).show();
}
}
});
...
...
takePicture();
TestThread.java
....
private void saveBitmap(String name, Bitmap bitmap, String timeStamp) {
File photo = CommonUtil.getFileName(timeStamp, name);
if (photo.exists()) photo.delete();
try {
Bitmap image = applyBrightnessContrast(bitmap);
FileOutputStream fos = new FileOutputStream(photo.getPath());
image.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
CommonUtil.showProgressDialog(mContext, null, false);
} catch (java.io.IOException e) {
CommonUtil.showProgressDialog(mContext, null, false);
Log.e("PictureDemo", "Exception in photoCallback", e);
}
markGeoTagImage(photo.getPath(),location);// Here is the Error.
}
public static void markGeoTagImage(String imagePath,Location location)
{
try {
ExifInterface exif = new ExifInterface(imagePath);
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, GPS.convert(location.getLatitude()));
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, GPS.latitudeRef(location.getLatitude()));
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, GPS.convert(location.getLongitude()));
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, GPS.longitudeRef(location.getLongitude()));
SimpleDateFormat fmt_Exif = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
exif.setAttribute(ExifInterface.TAG_DATETIME,fmt_Exif.format(new Date(location.getTime())));
exif.saveAttributes();
} catch (IOException e) {
e.printStackTrace();
}
}
はグローバル属性にするonSuccessであなたの受信場所を渡ししようとしたようmarkGeoTagImage – MHP
であなたのグローバル属性を使用「= nullの公共の静的な文字列;」アクティビティで?あなたがコードで説明するなら、それは素晴らしいことでしょう。 –
私はあなたのための答えを投稿する、タイプの場所からオブジェクトを定義し、場所が受け取ったときonSuccessでそれを初期化する必要があります – MHP