故事:我的应用程序专为移动平台设计,并与蓝牙点阵打印机有自己的连接,可在区域或字段上打印一些发票和文档。一些Android设备工作得很好但是当用户试图打印某些内容时,其中一些设备总是会丢失管道异常。
过程:
CD
然后我将我的值作为字节数组发送到 function StrToByteArr(strData: String): TArray<Byte>;
var
eEncoding: TEncoding;
begin
eEncoding := TEncoding.GetEncoding(857);
Result := eEncoding.GetBytes(strData);
end;
问题:我尝试使用10多种不同的设备打印我的值,成功率不够好(8/20设备工作正常)。我该怎么办?
答案 0 :(得分:1)
最简单的方法是使用 Androidapi.JNI.BluetoothAdapter.pas 库直接从Delphi代码处理所有这些配置。 它有 JBluetoothSocketClass ,它工作正常!
-
将字符串值转换为Byte JavaArray
function StringToJA(Data: String): TJavaArray<Byte>;
var
X: integer;
len: integer;
begin
len := Length(Data);
Result := TJavaArray<Byte>.Create(len);
for X := 0 to len do
begin
Result.Items[X] := Ord(Data[X]);
end;
end;
输出流使用
oStream := Sock.getOutputStream;
text := CHR(15) + ' ------ ----- HELLO WORLD ----- ------'
+ CHR(10) + CHR(13);
oStream.write(StringToJA(text));
答案 1 :(得分:0)
function StringToJA(Data: String): TJavaArray<Byte>;
var
X: integer;
len: integer;
begin
len := Length(Data);
Result := TJavaArray<Byte>.Create(len);
for X := 0 to len do
begin
Result.Items[X] := Ord(Data[X]);
end;
end;
有时使用上面的功能,应用程序会崩溃而没有任何意外情况
使用以下功能,应用程序可以打印数据并正常工作
function StringToJA(Data: String): TJavaArray<Byte>;
var
Arr: TBytes;
len: integer;
begin
Arr := TEncoding.Default.GetBytes(Data);
len := Length(Arr);
Result := TJavaArray<Byte>.Create(len);
if len > 0 then Move(Arr[0], Result.Data^, len);
end;