How can I select a picture from Android gallery and get the path + GPS data (lat & long)?
I get a path to a cached picture, without GPS data.
/data/user/0/com.embarcadero.Project1/cache/IMG_20190319_[...].jpg
The original picture is in /DCIM/Camera/ and has another name.
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;