1
私はthis Androidサンプルをガイドとして使用して、何の検証もせずにブルートゥース接続を作成しました。このアプリケーションには非常に制限されたユーザーベースがあり、格納)。bluetoothで転送されたバイトをマージする
文字列をうまく伝えることができ、魅力的に機能します。私の問題は画像を転送しようとするときです。
私は、イメージのバイト[]をブルートゥースサービスに送信する1つのアクティビティと、メッセージを受信してそのメッセージを借りて行う他のアクティビティのハンドラを持っています。
問題は、バッファのサイズのために、ハンドラが元のバイト[]の部分を受け取ることです。私がしようとしていることは、すべての部分を1バイトでマージして保存することです。
これは私が私のハンドラ内で行うループです:
byte[] result = new byte[originalByteSize];
byte[] readBuf = (byte[]) msg.obj;
if (cont < byteTimes){
if (result == null) {
result = appendData(readBuf,readBuf);
} else {
result = appendData(result,readBuf);
}
} else {
new SavePhotoTask(cont).execute(result);
}
これは
protected byte[] appendData(byte[] firstObject,byte[] secondObject){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
if (firstObject!=null && firstObject.length!=0)
outputStream.write(firstObject);
if (secondObject!=null && secondObject.length!=0)
outputStream.write(secondObject);
} catch (IOException e) {
e.printStackTrace();
}
return outputStream.toByteArray();
}
appendData関数であり、ここで私は、ファイルの書き込み場所です:
public class SavePhotoTask extends AsyncTask<byte[], String, String> {
int counter = 0;
public SavePhotoTask(int cont){
this.counter = cont;
}
@Override
protected String doInBackground(byte[]... jpeg) {
File photo = new File(Environment.getExternalStorageDirectory(), counter + "_photo.jpg");
if (photo.exists()) {
photo.delete();
}
try {
FileOutputStream fos = new FileOutputStream(photo.getPath());
fos.write(jpeg[0]);
fos.close();
} catch (java.io.IOException e) {
Log.e("PictureDemo", "Exception in photoCallback", e);
}
return (null);
}
を私が必要としたのはちょうど正しい方向のヒントです、ありがとう。
このコードの問題点は何ですか? –
@pratt出力する画像は黒い画面です – Carlos
コードはうまく見えますが、コードをデバッグする必要があります –