Отправка изображения с Python на Android телефон - PullRequest
0 голосов
/ 11 марта 2020

У меня проблема с 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. Можете ли вы помочь мне в моей проблеме? Спасибо. !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...