Jump to content

Colin S

Members
  • Content Count

    1
  • Joined

  • Last visited

Posts posted by Colin S


  1. 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; 

     

×