【发布时间】:2016-08-23 05:49:32
【问题描述】:
所以,我使用this Android 示例作为指导,在没有任何验证的情况下建立蓝牙连接(此应用的用户群非常有限,无法在商店下载)。
我能够很好地传输字符串,它就像一个魅力。我的问题是尝试传输图像时。
我有一个活动将图像的字节 [] 发送到蓝牙服务,另一个活动上的处理程序接收消息并使用所述消息执行 wharever。
问题是,由于缓冲区的大小,处理程序接收部分原始字节[]。我要做的是将所有部分合并到一个字节中并保存。
这是我在处理程序中执行的循环:
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);
}
这是 appendData 函数
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();
}
这是我写文件的地方:
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 输出的图像只是黑屏
-
代码看起来不错,需要调试一下我认为的代码
标签: android byte android-bluetooth