2017-10-12 208 views
0

大家好我是新來的android開發我連接藍牙設備作爲客戶端在不同的類線程。如果Nullpointerexcception發生然後我使用默認的UUID。之後,當我使用socket.connect()它顯示調試警告,並不發送任何對設備的請求。什麼都沒發生。如果任何人都可以提供幫助,我對android開發很陌生。先謝謝你。無法連接藍牙設備與Android Studio中的插座

警告和日誌

Warning and Logs

這裏是我的代碼在線程;

class ConnectWithDevice(context : ConnectWithBluetooth, device : BluetoothDevice) : Thread(){ 

    private val mContext : ConnectWithBluetooth = context 
    private val mmSocket : BluetoothSocket 
    private val mmDevice : BluetoothDevice 
    // Default UUID 
    private val mmDefaultUUID = UUID.fromString("78c374fd-f84d-4a9e-aa5b-9b0b6292952e") 

    init { 
     var temp : BluetoothSocket? = null 
     mmDevice = device 
     try { 
      temp = device.createRfcommSocketToServiceRecord(mmDevice.uuids[0].uuid) 
     }catch (en : NullPointerException){ 
      en.printStackTrace()    
      temp = device.createRfcommSocketToServiceRecord(mmDefaultUUID) 
     }catch (e : IOException){ 
      e.printStackTrace() 
      Log.e("TAG","Socket's create() method failed",e) 
     } 
     mmSocket = temp!! 
     Log.i("TAG","Got the Socket") 
    } 

    override fun run() { 
     // Cancel discovery because it otherwise slows down the connection. 
     if(mContext.bluetoothAdapter != null){ 
      mContext.bluetoothAdapter!!.cancelDiscovery() 
     } 

     try{ 
      // Connect to the remote device through the socket. This call blocks 
      // until it succeeds or throws an exception. 
      Log.i("TAG","Connecting...") 
      mmSocket.connect() 
      Log.i("TAG","Bluetooth Successfully Connected") 
     }catch (connectException : IOException){ 
      // Unable to connect; close the socket and return. 
      try{ 
       mmSocket.close() 
      }catch (closeException : IOException){ 
       Log.e("TAG","Could not close the client socket",closeException) 
      } 
      return 
     } 
     // The connection attempt succeeded. Perform work associated with 
     // the connection in a separate thread. 
     Log.i("TAG","Device is Connected") 
     //manageMyConnectedSocket(mmSocket) 
    } 

    // Closes the client socket and causes the thread to finish. 
    // Call this method from the main activity to shut down the connection. 
    fun cancel(){ 
     try { 
      mmSocket.close() 
     } catch (e: IOException) { 
      Log.e(ContentValues.TAG, "Could not close the client socket", e) 
     } 
    } 
} 

回答

0

最後我在這裏找到了解決辦法是 - > 我使用此代碼 - >

val m = device.javaClass.getMethod("createRfcommSocket", *arrayOf<Class<*>>(Int::class.java)) 
      temp = m.invoke(device, 1) as BluetoothSocket 

取而代之的是 - >

temp = device.createRfcommSocketToServiceRecord(mmDevice.uuids[0].uuid)