почему тэг EXIFINTERFACE обновляется только после перемещения файла изображения / перезагрузки телефона - PullRequest
0 голосов
/ 17 февраля 2012

Я кодировал приложение для 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();
        }
    }

}

1 Ответ

2 голосов
/ 19 февраля 2012

этот код, похоже, решил мою проблему.

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

это обновит содержимое SDCard.

...