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.delphigear.cn/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;
Pueden descargar el componente desde
http://www.delphiaccess.com/forum/android/componente-de-puerto-serial-delphi-xe5-en-android/msg84173
Espero sus comentarios y mejoras del componente.
Si realizan proyectos de este tipo, favor enviar videos del uso del Bluetooth o documentos.
Gracias.