Я кодировал приложение для Android, которое будет обновлять GPS-координаты в exif файла изображения.
Я думаю, что файл изображения exif был успешно обновлен, так как при чтении он даст мне сохраненные координаты GPS.
Однако, когда я открываю проводник для просмотра файла изображения в деталях, координата GPS все еще показывает неизвестное. Если я перезагружу свой телефон, то exif покажет обновленную GPS-координату. РЕДАКТИРОВАТЬ: если я переместить файл в другую папку, информация также будет обновлена. поэтому я должен сделать что-то с файлом изображения, прежде чем он покажет.
У кого-нибудь есть идеи, почему это так? и как мне решить эту проблему, чтобы он обновлялся немедленно, не переходя в файловый менеджер для перемещения файла или перезагрузки телефона?
Спасибо заранее!
edit: код добавлен для двух основных частей
коды для основного класса
public class ShowMapActivity extends MapActivity {
ExifInterface exifInterface;
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private int Option;
private String selected_img;
float LatLong[] = new float[2];
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.gpsmaploc); // bind the layout to the activity
Bundle extras = getIntent().getExtras();
if(extras !=null) {
selected_img = extras.getString("selected_img");
Option = extras.getInt("Option",0);
}
/*Intent cancelIntent = new Intent(this, A.class);
cancelIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(cncelIntent);*/
// create a map view
RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.mainlayout);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
//mapView.setStreetView(true);
mapController = mapView.getController();
mapController.setZoom(20); // Zoon 1 is world view
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
0, new GeoUpdateHandler());
updateExif(selected_img);
}
метод обновления exif
public void updateExif(String file) {
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
GeoPoint point = new GeoPoint(
(int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
String address = ConvertPointToLocation(point);
String strLongitude = location.convert(location.getLongitude(), location.FORMAT_SECONDS);
String strLatitude = location.convert(location.getLatitude(), location.FORMAT_SECONDS);
String Text = "Lat=" + strLatitude + " Long=" + strLongitude;
String message = String.format(
"Current Location \n%3$s \nLongitude: %1$s \nLatitude: %2$s \n"+Text,
location.getLongitude(), location.getLatitude(),address
);
Toast.makeText(getApplicationContext(), message,
Toast.LENGTH_LONG).show();
try {
exifInterface = new ExifInterface(file);
String LATITUDE = degreeDecimal2ExifFormat(location.getLatitude());
String LATITUDE_REF = "N";
String LONGITUDE = degreeDecimal2ExifFormat(location.getLongitude());
String LONGITUDE_REF = "E";
String message2 = String.format(
"Longitude: "+ LONGITUDE + "\nLatitude: " + LATITUDE );
Toast.makeText(getApplicationContext(), message2,
Toast.LENGTH_LONG).show();
exifInterface.setAttribute(ExifInterface.TAG_GPS_LATITUDE, LATITUDE);
exifInterface.setAttribute(ExifInterface.TAG_GPS_LATITUDE_REF, LATITUDE_REF);
exifInterface.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, LONGITUDE);
exifInterface.setAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF, LONGITUDE_REF);
exifInterface.saveAttributes();
String exif = "";
float[] LatLong = new float[2];
if(exifInterface.getLatLong(LatLong)){
exif += "\n saved latitude= " + LatLong[0];
exif += "\n saved longitude= " + LatLong[1];
}else{
exif += "Exif tags are not available!";
}
Toast.makeText(getApplicationContext(), exif,
Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}