Odczyt danych z TBluetoothSocket

0

Witam,
wykorzystuję aplikację (Delphi XE7)

C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Mobile Samples\Device Sensors and Services\Bluetooth\Classic Bluetooth Basic app

do przesyłania tesktu między połączonymi przez bluetooth urządzenami (android, Windows)
Poniższy kod odbiera dane przesyłane z innego urządzenia.
Wiem jak długi teskt przesyłam

 ShowMessage(IntTOStr(length(FData)));

ale przy próbie odczytu danych, zwracany jest pusty ciąg znaków.

Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData));

Czy spotkaliście się z takim problemem?

procedure TServerConnectionTH.execute;
var
  ASocket: TBluetoothSocket;
  Msg: string;
begin
  while not Terminated do
    try
      ASocket := nil;
      while not Terminated and (ASocket = nil) do
        ASocket := FServerSocket.Accept(100);
      if(ASocket <> nil) then
      begin
        FSocket := ASocket;
        while not Terminated do
        begin
          FData := ASocket.ReadData;
            ShowMessage(IntTOStr(length(FData)));
          if length(FData) > 0 then
            Synchronize(procedure
              begin
                Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData));
             Form1.DisplayR.GoToTextEnd;
              end);
          sleep(100);
        end;
      end;
    except
      on E : Exception do
      begin
        Msg := E.Message;
        Synchronize(procedure
          begin
            Form1.DisplayR.Lines.Add('Server Socket closed: ' + Msg);
            Form1.DisplayR.GoToTextEnd;
          end);
      end;
    end;
end;
0
TEncoding.GetString decodes the Bytes byte array into a string. 

Nie wiem (szczerze to strzelam bo się nie znam;) ) - może trzeba zrobić jakieś cudo w stylu:

Form1.DisplayR.Lines.Add(TEncoding.UTF8.GetString(FData[0]));
0

Problem w tym, że funkcja

  TBluetoothSocket = class
  protected
    function GetConnected: Boolean; virtual; abstract;
    procedure DoClose; virtual; abstract;
    procedure DoConnect; virtual; abstract;
    function DoReadData: TBytes; virtual; abstract;
    procedure DoSendData(const AData: TBytes); virtual; abstract;
  public
    procedure Close;
    procedure Connect;
    function ReadData: TBytes;
    procedure SendData(const AData: TBytes);

    property Connected: Boolean read GetConnected;
  end;

function TBluetoothSocket.ReadData: TBytes;
begin
  Result := DoReadData;
end;

screenshot-20190316152615.png

Zwraca tablice z samymi wartościami 0.
Nie mogę znaleźć alternatywy dla przesylania danych z telefonu do PC przez bluetooth.
Porty szeregowe odpadają a chciałbym to zrobić bez kupowania komponentów (w końću kupiłem Delphi za ponad 10k któa chwali się, że potrafi)
NIestety AppTetthering też nie działa dla bluetooth.

Zabieram się za użycie kodu Javy w Delphi.
Mam nadzieję, że to pomoże.

0

Przejrzyj przykłady jakie są dołączone do środowiska...\Embarcadero\Studio\18.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\Bluetooth

0

C:\Users\Public\Documents\Embarcadero\Studio\15.0\Samples\Object Pascal\Mobile Samples\Device Sensors and Services\Bluetooth\BlueChat

Ta sama metoda i ten sam problem.
TBluetoothSocket.ReadData zwraca 0,0,0,0 (ilość zer w zależności od długości tesktu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0