2016-12-28 9 views
5

ストーリー:私のアプリケーションはモバイルプラットフォーム用に設計されており、ブルートゥースドットマトリックスプリンタと独自の接続があり、地域やフィールドに請求書や文書を印刷します。アンドロイドデバイスの中にはうまくいくものもありますが、ユーザーが何かを印刷しようとすると、破損したパイプの例外が常にスローされます。デルファイファイアモンキー「壊れたパイプ」例外

プロセス:

  1. 私はペアリングデバイスのリストを取得するためTBluetoothManagerTBluetoothDeviceListを使用して、私は設定のiniファイル内のすべてのペアのデバイスを保存。
  2. 印刷したいデバイスとの接続を開始すると、TBluetoothSocketオブジェクトに行ごとに請求書が送信されます。
  3. この関数を使用して各行をByte Arrayに変更します。

function StrToByteArr(strData: String): TArray<Byte>; var eEncoding: TEncoding; begin eEncoding := TEncoding.GetEncoding(857); Result := eEncoding.GetBytes(strData); end;

その後、私はTBluetoothSocket.SendData(Byte>) Method

問題にバイト配列としての私の値を送信:私は10+異なるデバイスで自分の価値を印刷しようとしたと成功率は(十分ではありません8/20デバイスは正常に動作しています)。私は何をすべきか?

答えて

3

最も簡単な方法は、Androidapi.JNI.BluetoothAdapter.pasライブラリを使用して、これらのすべての設定をDelphiコードから直接処理することです。 JBluetoothSocketClassあり、正常に動作します!

-

の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)); 
をバイトするためにあなたの文字列値を変換します
関連する問題