サンプルの Bluetooth チャット アプリケーションに、画像を送信する機能を追加しました。わからない問題にぶち当たりました。サンプル アプリでは、データを送受信するために文字列が必要です。選択した画像でテキストを送信できるように、ビットマップをバイトに変換してから文字列に変換するためにBase64を訴えています。小さな画像 (例: 4kb サイズの完全に黒い画像) を送信すると、それが送受信され、リストビューに表示されます。しかし、大きな画像を送信すると、多くのパッケージに分割されます。つまり、1 つの画像ではなく多数のテキストが取得され、リストビューにデータを入力するために使用する配列のサイズは、パッケージの数に応じて 1 以上になるため、リストビューには多くのテキストが入力されます。
結局のところ、それは画像のサイズに依存します。私は多くの画像で実験しました。長さ (文字列として) が 50096 の写真の場合、受信側で 51 個のパッケージが取得されます。長さが 77896 の別のイメージの場合、81 個のパッケージを取得します。そこで、本当に小さな画像で試してみることにしました。ペイントで黒の画像を作成したところ、無事に送受信できました。長さを測定したところ、280 でした。次に、長さ 980 の白い画像に少し黄色を加えて実験しました。これも正常に送信されました。次に、画像に黒を追加した結果、長さが 1554 になりました。今回は、画像の代わりにいくつかのテキストを受け取りました。
したがって、Bluetooth を介してデータを送信する場合、文字列の長さが制限されるというのが私の結論です。これは、テクノロジーに精通している人にとっては明白かもしれません。
これについて何ができますか?1 つのパッケージで送信できる最大文字数がわかっていれば、送信側でパッケージの数を計算でき、受信側のサイズですべてのパッケージを連結できます。
この動作を示すために、レシーバー側の 2 つの画像を示します。最初の関数は正しい関数で、2 番目の関数は間違った関数です。