У меня проблема с Bluetooth-связью между android телефоном и p c. Во-первых, я хочу отправить изображение с телефона P C на Android.
Позвольте мне показать мои коды Android side
Обработчик:
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch(msg.what){
case STATE_LISTENING:
status.setText("LISTENING");
break;
case STATE_CONNECTING:
status.setText("Connecting");
break;
case STATE_CONNECTED:
status.setText("Connected");
break;
case STATE_CONNECTION_FAILED:
status.setText("Connection Failed");
break;
case STATE_MESSAGE_RECEIVED:
byte[] readBuff = (byte[]) msg.obj;
Bitmap bitmap = BitmapFactory.decodeByteArray(readBuff,0,msg.arg1);
imageView.setImageBitmap(bitmap);
break;
}
return true;
}
});
Класс SendRecieve:
public class SendReceive extends Thread{
private final BluetoothSocket bluetoothSocket;
private final Handler _handler;
private final InputStream inputStream;
private final OutputStream outputStream;
public SendReceive(BluetoothSocket socket, Handler handler){
bluetoothSocket = socket;
InputStream tempIn = null;
OutputStream tempOut = null;
_handler = handler;
try {
tempIn = bluetoothSocket.getInputStream();
tempOut = bluetoothSocket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
inputStream = tempIn;
outputStream = tempOut;
}
public void run(){
byte[] buffer = null;
int numberOfBytes = 0;
int index = 0;
boolean flag = true;
while(true){
if(flag){
try {
byte[] temp = new byte[inputStream.available()];
if(inputStream.read(temp)>0){
numberOfBytes = Integer.parseInt(new String(temp,"UTF-8"));
buffer = new byte[numberOfBytes];
flag = false;
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
try {
byte[] data = new byte[inputStream.available()];
int numbers = inputStream.read(data);
System.arraycopy(data,0,buffer,index,numbers);
index = index+numbers;
if(index == numberOfBytes){
_handler.obtainMessage(MainActivity.STATE_MESSAGE_RECEIVED, numberOfBytes,-1,buffer).sendToTarget();
flag = true;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void write(byte[] bytes){
try {
outputStream.write(bytes);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
Python коды:
#!/usr/bin/python
import bluetooth
from PIL import Image
im = Image.open('MyImage.png')
im_resize = im.resize((500, 500))
buf = io.BytesIO()
im_resize.save(buf, format='PNG')
byte_im = buf.getvalue()
def connect (bd_addr,port,message):
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr, port))
sock.send(message)
sock.close()
addr = "XX:XX:XX:XX"
services = bluetooth.find_service(address=addr)
for svc in services:
if svc["name"] == b'BluetoothProject\x00': #Name of Android Project
connect(addr,svc["port"], byte_im)
else:
print("Bluetooth is offline or smth else")
Я могу отправлять текстовые сообщения без проблем, но не могу отправить изображение. Ошибка на стороне Android: java .lang.NumberFormatException: для входной строки. Он не может преобразовать строку в int (класс SendRecieve, numberOfBytes = Integer.parseInt (new String (temp, "UTF-8")).
Как отправить изображение и в каком формате со стороны python? Какой правильный путь?.
И я также попытался отправить в формате base64. Затем ошибка была "bad-base 64" и снова была строка numberofbytes. Можете ли вы помочь мне в моей проблеме? Спасибо. !!