Get path and GPS from a gallery picture

  

How can I select an image from Android gallery and get the path + GPS data (lat & long)?

With the code below I don‘t get the path from the original image with GPS data.
It returns a path to a cache file without GPS data.
“/data/user/0/com.embarcadero.Project1/cache/IMG_20190319_[…].jpg”
The original image is in “/DCIM/Camera/” and has another name.

How do I get the path from the original image?

procedure TForm2.FormCreate(Sender: TObject);
begin
TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedImagePath, DidReceiveBitmap);
end;

procedure TForm2.TakePhotoFromLibraryAction1DidCancelTaking;
begin
//
end;

procedure TForm2.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);
begin
Image1.Bitmap := Image;
end;

procedure TForm2.DidReceiveBitmap(const Sender: TObject; const M: TMessage);
var
LMessage: TMessageResultNotification;
LImagePath: String;
begin
if M is TMessageReceivedImagePath then
begin
LMessage := TMessageResultNotification(M);
LImagePath := (M as TMessageReceivedImagePath).Value; // <— ‘/data/user/0/com.embarcadero.Project1/cache/IMG_20190319_[…].jpg’
if LMessage.RequestCode = TJFMXMediaLibrary.JavaClass.ACTION_TAKE_IMAGE_FROM_LIBRARY then
begin
GetEXIF(LImagePath);
Image2.Bitmap.LoadFromFile(LImagePath);
end;
end;
end;

procedure TForm2.GetEXIF(const AFileName: String);
var
LEXIF: JExifInterface;
LLatLong: TJavaArray<Single>;
begin
LEXIF := TJExifInterface.JavaClass.init(StringToJString(AFileName));
Memo1.Lines.Add(‘File: ‘ + AFileName);
LLatLong := TJavaArray<Single>.Create(2);
if LEXIF.getLatLong(LLatLong) then
begin
Memo1.Lines.Add(‘Latitude: ‘ + LLatLong.Items[0].ToString);
Memo1.Lines.Add(‘Longitude: ‘ + LLatLong.Items[1].ToString);
end;
LLatLong.Free;
end;

Comments are closed.