繁体   English   中英

Android-通过蓝牙发送图像

[英]Android - Send images via Bluetooth

我想通过蓝牙在具有相同应用程序的两部Android手机之间发送图像。 两部手机都应该能够发送和接收图像。

我尝试发送文本,并且可以正常工作。 但是这是图像的问题:程序在while循环中保持阻塞状态:

while(len != -1){
            outputStream.write(buffer, 0, len)
            len = bis.read(buffer)
        }

我知道read正在阻塞,它应该意味着bis为空,但是我不明白为什么它为空。

这是发送代码:

//sending bitmap
private var socket = device.createRfcommSocketToServiceRecord(uuid)

    override fun run() {
        this.socket.connect()
        var outputStream = this.socket.outputStream

        var bos = ByteArrayOutputStream()
        bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, bos)

        var bitmapData = bos.toByteArray()
        var bais = ByteArrayInputStream(bitmapData)
        var bis = BufferedInputStream(bais, 8*1024)

        val buffer = ByteArray(8192)
        var len : Int =  bis.read(buffer)

        while(len != -1){
            outputStream.write(buffer, 0, len)
            len = bis.read(buffer)
        }

        outputStream.flush()
        outputStream.close()
    }

在这里接收:

//receive bitmap
private var inputStream = this.socket.inputStream

override fun run() {
    val buffer = ByteArray(8192)
    var current = 0
    try {
        var bytesRead = 0
        current = bytesRead

        do {
            bytesRead = inputStream.read(buffer, current, buffer.size - current)
            if (bytesRead >= 0) {
                current += bytesRead
                Log.v("server", current.toString())
            }
        } while (bytesRead > -1)
    } catch (e : IOException){
        e.printStackTrace()
    } finally {
        inputStream.close()
       // outputStream.close()

        socket.close()
    }

    Log.v("server", "over")
    bitmapTemp = BitmapFactory.decodeByteArray(buffer, 0, current)
    pic_image?.setImageBitmap(bitmapTemp)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM