首页 > 解决方案 > 将图像从 Python 发送到 Android 手机

问题描述

我有一个关于安卓手机和电脑之间的蓝牙通信的问题。首先,我想将图像从 PC 发送到 Android 手机。

让我展示我的代码 Android 端

处理程序:

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;
        }
    });

发送接收类:


    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 行。你能帮我解决我的问题吗?谢谢。!!

标签: androidpython-3.xbluetooth

解决方案


推荐阅读