Create BluetoothClient.kt
parent
21d16e785a
commit
69848dce6e
@ -0,0 +1,158 @@
|
|||||||
|
package com.rookiedev.hexapod.network
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.bluetooth.BluetoothAdapter
|
||||||
|
import android.bluetooth.BluetoothDevice
|
||||||
|
import android.bluetooth.BluetoothManager
|
||||||
|
import android.bluetooth.BluetoothSocket
|
||||||
|
import android.content.Context
|
||||||
|
import java.io.*
|
||||||
|
import java.lang.reflect.InvocationTargetException
|
||||||
|
import java.lang.reflect.Method
|
||||||
|
import java.net.*
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
class BluetoothClient(
|
||||||
|
context: Context?,
|
||||||
|
mac: String?,
|
||||||
|
messageListener: OnMessageReceived?,
|
||||||
|
onConnect: OnConnectEstablished?,
|
||||||
|
onDisconnect: OnDisconnected?
|
||||||
|
) :
|
||||||
|
Thread() {
|
||||||
|
private var mContext: Context? = null
|
||||||
|
private var bluetoothManager: BluetoothManager? = null
|
||||||
|
private var bluetoothAdapter: BluetoothAdapter? = null
|
||||||
|
private var device: BluetoothDevice? = null
|
||||||
|
|
||||||
|
private var socket: BluetoothSocket? = null
|
||||||
|
|
||||||
|
private var btOut: PrintWriter? = null
|
||||||
|
private var btIn: BufferedReader? = null
|
||||||
|
private var mMessageListener: OnMessageReceived? = null
|
||||||
|
private var onConnected: OnConnectEstablished? = null
|
||||||
|
private var onDisconnected: OnDisconnected? = null
|
||||||
|
private var isConnected = false
|
||||||
|
|
||||||
|
@SuppressLint("MissingPermission")
|
||||||
|
override fun run() {
|
||||||
|
val uuid: UUID =
|
||||||
|
UUID.fromString("00001101-0000-1000-8000-00805F9B34FB") //UUID for serial connection
|
||||||
|
val secure = false
|
||||||
|
val port = 10
|
||||||
|
try {
|
||||||
|
if (secure) {
|
||||||
|
if (port == 0) {
|
||||||
|
socket = device!!.createRfcommSocketToServiceRecord(uuid)
|
||||||
|
} else {
|
||||||
|
val createRfcommSocket: Method = this.device!!.javaClass.getMethod(
|
||||||
|
"createRfcommSocket", *arrayOf<Class<*>?>(
|
||||||
|
Int::class.javaPrimitiveType
|
||||||
|
)
|
||||||
|
)
|
||||||
|
socket = createRfcommSocket.invoke(device, port) as BluetoothSocket
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (port == 0) {
|
||||||
|
socket = device!!.createInsecureRfcommSocketToServiceRecord(
|
||||||
|
uuid
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
val createInsecureRfcommSocket: Method =
|
||||||
|
this.device!!.javaClass.getMethod(
|
||||||
|
"createInsecureRfcommSocket", *arrayOf<Class<*>?>(
|
||||||
|
Int::class.javaPrimitiveType
|
||||||
|
)
|
||||||
|
)
|
||||||
|
socket = createInsecureRfcommSocket.invoke(
|
||||||
|
device,
|
||||||
|
port
|
||||||
|
) as BluetoothSocket
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: IOException) {
|
||||||
|
println(e)
|
||||||
|
// Log.e(TAG, "Socket Type: " + mSocketType.toString() + "create() failed", e)
|
||||||
|
} catch (e: NoSuchMethodException) {
|
||||||
|
println(e)
|
||||||
|
// Log.e(TAG, "Socket Type: " + mSocketType.toString() + "create() failed", e)
|
||||||
|
} catch (e: InvocationTargetException) {
|
||||||
|
println(e)
|
||||||
|
// Log.e(TAG, "Socket Type: " + mSocketType.toString() + "create() failed", e)
|
||||||
|
} catch (e: IllegalAccessException) {
|
||||||
|
println(e)
|
||||||
|
// Log.e(TAG, "Socket Type: " + mSocketType.toString() + "create() failed", e)
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
socket!!.connect()
|
||||||
|
onConnected!!.onConnected()
|
||||||
|
btOut = PrintWriter(
|
||||||
|
BufferedWriter(OutputStreamWriter(socket!!.outputStream)),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
btIn = BufferedReader(InputStreamReader(socket!!.inputStream))
|
||||||
|
isConnected = true
|
||||||
|
while (isConnected) {
|
||||||
|
sleep(1000)
|
||||||
|
}
|
||||||
|
} catch (e: InterruptedException) {
|
||||||
|
// controller.cancelProgressDialog(java.lang.ModuleLayer.Controller.SERVERALERT)
|
||||||
|
println(e)
|
||||||
|
// controller.alertDialog(0)
|
||||||
|
// onDisconnected!!.onDisconnected()
|
||||||
|
} catch (e: SocketTimeoutException) {
|
||||||
|
println(e)
|
||||||
|
onDisconnected!!.onDisconnected()
|
||||||
|
} catch (e: ConnectException) {
|
||||||
|
println(e)
|
||||||
|
onDisconnected!!.onDisconnected()
|
||||||
|
} catch (e: IOException) {
|
||||||
|
println(e)
|
||||||
|
onDisconnected!!.onDisconnected()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the message entered by client to the server
|
||||||
|
*
|
||||||
|
* @param message text entered by client
|
||||||
|
*/
|
||||||
|
fun sendMessage(message: String?) {
|
||||||
|
if (this.btOut != null && !this.btOut!!.checkError()) {
|
||||||
|
println("send message")
|
||||||
|
this.btOut!!.print(message)
|
||||||
|
this.btOut!!.flush()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stopClient() {
|
||||||
|
isConnected = false
|
||||||
|
socket!!.close()
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnMessageReceived {
|
||||||
|
fun messageReceived(message: String?)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnConnectEstablished {
|
||||||
|
fun onConnected()
|
||||||
|
}
|
||||||
|
|
||||||
|
interface OnDisconnected {
|
||||||
|
fun onDisconnected()
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
this.mContext = context
|
||||||
|
this.mMessageListener = messageListener
|
||||||
|
this.onConnected = onConnect
|
||||||
|
this.onDisconnected = onDisconnect
|
||||||
|
|
||||||
|
this.bluetoothManager = this.mContext!!.getSystemService(Context.BLUETOOTH_SERVICE) as BluetoothManager
|
||||||
|
this.bluetoothAdapter = this.bluetoothManager!!.adapter
|
||||||
|
|
||||||
|
this.device = this.bluetoothAdapter!!.getRemoteDevice(mac)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue