Les comparto el componente y un ejemplo para la transmisión de datos vía bluetooth como puerto serial.
TBLUEPORT COMPONENT
El TBluePort es un componente que permite la conexión de manera sencilla desde Android a dispositivos Bluetooth en configuración de puerto serial. Encapsula el API de Android utilizando la librería Androidapi.JNI.BluetoothAdapter publicada por RedTitan Technology 2013, http://www.delphigea...0/10162/go.aspx
Propiedades
IsEnabled: Campo Booleano que permite determinar si el dispositivo Bluetooth está activo en el sistema, es una propiedad de solo lectura.
Ej. If BluePort1.IsEnabled then…
PortList: Campo de tipo TStringList, retorna una lista de los dispositivos Bluetooth disponibles, en formato nombre=MAC, cada elemento de esta lista se puede utilizar como información para asignar el puerto.
Ej. procedure TForm4.FormCreate(Sender: TObject); begin If BluePort1.IsEnabled then ListBox1.Items.text := BluePort1.PortList.text; end;
Active: Permite conectar o desconectar del puerto previamente seleccionado.
Ej. BluePort1.Active := True;
Ej. If BluePort1.Active then…
Port: Especifica el nombre del puerto y la dirección MAC correspondiente al dispositivo bluetooth, el campo es de tipo texto y debe tener la forma nombrepuerto=MACAddress, en su defecto puede contener solamente la MAC.
Ej. BluePort1.Port := ‘BOLUTEC=00:15:FF:F3:PE:38’
SleepTime: Corresponde al tiempo en milisegundos que espera la multitarea de lectura antes de revisar el Puerto nuevamente.
Eventos:
OnAfterClose: Este evento responde a la acción de desconectar el puerto asignando False a la propiedad Active, no reconoce la desconexión del puerto por perdida de la conectividad con el dispositivo bluetooth asociado.
Ej.
procedure TForm4.BluePort1AfterClose(Sender: TObject); begin Toast('se ha desconectado de ' + BluePort1.Port + ')'); BtnConnect.Enabled := Not BluePort1.Active; BtnDisconnect.Enabled := BluePort1.Active; end;
OnAferOpen: El evento se dispara al realizar la conexión y únicamente si la conexión fue exitosa, en este caso la propiedad Active ya se encuentra en True.
Ej.
procedure TForm4.BluePort1AfterOpen(Sender: TObject); begin Toast('se ha conectado a ' + BluePort1.Port + ')'); BtnConnect.Enabled := Not BluePort1.Active; BtnDisconnect.Enabled := BluePort1.Active; end;
OnBeforeClose: Evento que responde a la orden de desconectarse, cambiando la propiedad Active a False.
Ej.
procedure TForm4.BluePort1BeforeClose(Sender: TObject); begin Toast('se está desconectado de ' + BluePort1.Port + ')'); end;
OnBeforeOpen: Evento que responde a la orden de conectarse, cambiando la propiedad Active a True.
Ej.
procedure TForm4.BluePort1BeforeOpen(Sender: TObject); begin Toast('Conectando a ' + BluePort1.Port + ')'); end;
OnDataRx: Existe una multitarea que revisa el stream de entrada del puerto en Android, en caso de encontrarse información, la almacena en un Array of Bytes de tipo TBytes o TArray<System.Byte>.
Ej.
procedure TForm4.BluePort1DataRx(Data: TArray<System.Byte>; len: Integer); Var S: String; I: Integer; Begin //Convierte el array en un string S := ''; For I := 0 to len - 1 do begin S := S + Chr(Data[I]); end; //Actualiza los componentes visuales. tThread.Queue(Nil, procedure begin Try Memo1.Lines.BeginUpdate; Memo1.Lines.text := Memo1.Lines.text + S; Finally Memo1.Lines.EndUpdate End; end); end;
OnDataTx: El evento se ejecuta justo antes de enviar la información al puerto.
Ej.
procedure TForm4.BluePort1DataTx(Data: TArray<System.Byte>; len: Integer); Var S: String; I: Integer; begin S := ''; For I := 0 to len - 1 do begin S := S + Chr(Data[I]); end; tThread.Queue(Nil, procedure begin Try Memo1.Lines.BeginUpdate; Memo1.Lines.text := Memo1.Lines.text + S; Finally Memo1.Lines.EndUpdate End; end); end;
Métodos
Procedure Write(Value: String): Permite enviar al Puerto un string, el componente convierte cada carácter en un byte, asignándolo a una posición de un byte en el buffer de envío, por lo tanto no es necesario declarar el string de ningún tipo particular.
Ej. Blueport1.Write(‘Este es el texto a envíar’);
Procedure Write(Value: Integer): Permite enviar un entero o byte por el Puerto serial bluetooth.
Ej. BluePort1.Write(65);
Procedure Write(Value: TBytes): Permite enviar un array de bytes al Puerto.
Ej.
BluePort1.Write(TBytes.Create($A, $45, $FF, $10));
Procedure Write(Stream: TStream): Permite enviar el contenido de un stream directamente al puerto
procedure TForm4.BtnEnviarClick(Sender: TObject); Var St : TMemoryStream; begin St := TMemoryStream.Create; St.LoadFromFile(FileName); St.Position := 0; BluePort1.Write(St); end;
Espero sus comentarios y mejoras al mismo.
saludos.