2014-02-21 72 views
2

所以即時通訊工作的應用程序,直接連接通過藍牙接受來自RFCOMM通道的字符串命令併發送響應。Android到個人電腦RFCOMM頻道

所以這些都是2類我目前正在與

Bluetooth_Manager

import android.bluetooth.*; 
import android.content.Intent; 

public class Reader_BluetoothManager { 

    protected Reader_MainScreen main; 
    protected BluetoothAdapter bAdapter; 
    private Reader_AcceptThread bAccept; 

    public Reader_BluetoothManager(Reader_MainScreen main) { 
     this.main = main; 
     initiate(); 
    } 

    public void initiate(){ 
     checkForBluetooth(); 
     enableBluetooth(); 
    } 

    public void log(String l){ 
     main.log(l); 
    } 

    public void checkForBluetooth(){ 
     bAdapter = BluetoothAdapter.getDefaultAdapter(); 
     if (bAdapter == null) { 
      main.log("No Bluetooth supported!"); 
      return; 
     } 
     main.log("Bluetooth supported..."); 
    } 

    public void enableBluetooth(){ 
     if (!bAdapter.isEnabled()) { 
      main.log("Bluetooth not enabled... requesting activation"); 
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      main.startActivityForResult(enableBtIntent, main.BLUETOOTH_ENABLE_CODE); 
     } 
    } 

    public void enableConnection(){ 
     main.log("Connecting..."); 
     if (bAccept != null) 
      bAccept.interrupt(); 
     bAccept = new Reader_AcceptThread(this); 
     bAccept.start(); 
    } 

    public void stopConnection(){ 
     if (bAccept != null) 
      bAccept.interrupt(); 
    } 
} 

而且AcceptThread

import java.io.IOException; 
import java.util.UUID; 

import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothServerSocket; 
import android.bluetooth.BluetoothSocket; 

public class Reader_AcceptThread extends Thread{ 

    private BluetoothServerSocket serverSocket; 
    private BluetoothSocket socket; 
    private BluetoothDevice device; 
    private Reader_BluetoothManager main; 


    public Reader_AcceptThread(Reader_BluetoothManager main) { 
     this.main = main; 
    } 

    public void run(){ 
     try { 
      serverSocket = main.bAdapter.listenUsingRfcommWithServiceRecord("XXXXXX", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); 
      main.log("checkPoint 1"); 
      socket = serverSocket.accept(); 
      main.log("checkPoint 2"); 
      device = socket.getRemoteDevice(); 
      main.log("checkPoint 3"); 
      main.log("connection established..."); 
      main.log(socket.toString()); 
     } catch (IOException e) { 
      main.log("error..."); 
      main.log(e.toString()); 
      main.main.stopConnection(); 
      interrupt(); 
     } 
     while (!isInterrupted()){ 
      try { 
       sleep(2000); 
      } catch (InterruptedException e) { 
       interrupt(); 
       break; 
      } 
      main.log("ping"); 
     } 
    } 
} 

工作,我這些根據谷歌文檔指南構成。 同樣在我的筆記本電腦,我正在做以下幾點:

enter image description here

,這是,什麼是發生在我的電話: enter image description here

這裏,發生了什麼,當我嘗試從連接我的Windows PC: enter image description here

正如你可以看到在手機屏幕截圖我卡在socket = serverSocket.accept()

回答

2

您所使用的UUID是該服務的UUID - 如果你想使用默認的RFCOMM通道,你應該使用SPP UUID "00001101-0000-1000-8000-00805F9B34FB"代替UUID.randomUUID();

serverSocket = main.bAdapter.listenUsingRfcommWithServiceRecord("Connection Test", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); 
+0

好感謝你..我不知道我不得不爲此使用固定的UUID ..我能夠從Windows PC進行連接。我是對的,當我嘗試通過'echo TEXT> COM4'發送消息? –

+0

是的,你可以這樣做,或使用超級終端並通過它連接。不介意也接受答案:) –

+0

想到另一個問題?..我現在有一個COM端口「COM4」從我的電腦到我的手機,但手機仍然卡在'checkPoint1'上。當我嘗試'回顯你好> COM4'的cmd說:「系統找不到那個文件」。我也嘗試通過膩子連接..但膩子放棄與「無法打開連接到COM4,無法打開串行端口」 –