我正在尝试显示从 Camera 的 PreviewView 创建的位图。如果我关闭
outputStream
,它只能向另一个机器人显示一次,但它会因此关闭整个套接字。因此,我无法显示下一张图像。
这是我的输入代码:
wifiClient = WiFiClient(wifiP2pInfo.groupOwnerAddress, activity)
wifiClient.start()
wifiClient.write(selfCameraView.bitmap)
这是我的客户代码:
class WiFiClient(
private val inetAddress : InetAddress,
private val activity : NetworkActivity
) : Thread() {
private lateinit var inputStream : InputStream
private lateinit var outputStream : OutputStream
fun write (bitmap: Bitmap?) {
val executor = Executors.newSingleThreadExecutor()
// val handler = Handler(Looper.getMainLooper())
executor.execute {
try {
if (bitmap != null) {
val stream = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
outputStream.write(stream.toByteArray())
outputStream.flush()
// outputStream.close()
Log.v(MainActivity.TAG, "Output Stream: $bitmap")
}
} catch (e: IOException) {
e.printStackTrace()
}
}
}
override fun run() {
super.run()
val socket = Socket()
// val executor = Executors.newSingleThreadExecutor()
val handler = Handler(Looper.getMainLooper())
try {
socket.connect(InetSocketAddress(inetAddress.hostAddress, 8888), 500)
inputStream = socket.getInputStream()
outputStream = socket.getOutputStream()
} catch (e : IOException) {
e.printStackTrace()
}
Log.v(MainActivity.TAG, "REACHED HERE")
val buffer = ByteArray(1048576)
try {
var bytes = inputStream.read(buffer, 0, buffer.size)
var current = bytes
do {
bytes = inputStream.read(buffer, current, (buffer.size - current))
if (bytes >= 0) {
current += bytes
}
} while(bytes > -1)
handler.post {
val bitmap = BitmapFactory.decodeByteArray(buffer, 0, buffer.size)
activity.otherCameraView.setImageBitmap(bitmap)
}
// inputStream.close()
} catch (e : IOException) {
e.printStackTrace()
} finally {
// socket.close()
}
}
}
我该如何解决这个问题?