2014-01-21 139 views
0

我想打開一個連接,我的筆記本電腦有藍牙從我的手機。服務器程序正在我的筆記本上運行。我的意圖是與我的筆記本電腦建立連接,以便在同一個創建的套接字上連續發送一些輸入。連接成功建立並且一個字節被髮送到在我的筆記本電腦上運行的服務器,但是在按下發送按鈕後沒有發送任何東西接收命令藍牙連接

以下代碼適用於第一次嘗試。當我試圖重新發送使用相同的連接字節值沒有發送。當我第二次啓動我的應用程序時,我的手機被掛起。我正在尋找內存問題,但我找不到任何內存問題。我錯過了什麼 ?我需要做些什麼嗎?

public class BluetoothActivity extends Activity { 
     private TextView myLabel; 
     private EditText myTextbox; 
     private BluetoothAdapter mBluetoothAdapter; 
     private BluetoothSocket mmSocket; 
     private BluetoothDevice mmDevice; 
     private OutputStream mmOutputStream; 
     private BufferedOutputStream mbuffStream; 
     private ProgressDialog progressBar; 
     private int progressBarStatus; 
     private Context mContext; 
     private TextView devicesLabel; 
     private TextView devices; 

     private final static int MAX_VALUE = 100; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_bluetooth); 
      mContext = this; 
      Button openButton = (Button) findViewById(R.id.open); 
      Button sendButton = (Button) findViewById(R.id.send); 
      Button closeButton = (Button) findViewById(R.id.close); 
      myLabel = (TextView) findViewById(R.id.label); 
      devicesLabel = (TextView) findViewById(R.id.devicelabel); 
      devices = (TextView) findViewById(R.id.devices); 
      myTextbox = (EditText) findViewById(R.id.entry); 
      mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

      // Open Button 


      openButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        try { 
         openBTConnection(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
      // Send Button 
      sendButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        try { 
         sendData(); 
        } catch (IOException ex) { 
        } 
       } 
      }); 

      // Close button 
      closeButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        closeBT(); 
       } 
      }); 
     } 

     private void openBTConnection() throws IOException { 
      UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // Standard 
                        // SerialPortService 
                        // ID 
      mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); 
      System.out.println("socket " + mmSocket.toString()); 
      if (mmSocket != null) { 
       mmSocket.connect(); 
       mmOutputStream = mmSocket.getOutputStream(); 
       mbuffStream = new BufferedOutputStream(mmOutputStream, 1); 
       myLabel.setText("Bluetooth Opened"); 
      } else { 
       myLabel.setText("No bluetooth device found"); 
      } 
     } 

     void sendData() throws IOException { 
      String msg = myTextbox.getText().toString(); 
      mbuffStream.write(msg.getBytes(), 0, msg.getBytes().length); 
      mbuffStream.flush(); 
      myLabel.setText("Data Sent"); 
     } 

     void closeBT() { 
      try { 
       if (mmOutputStream != null) { 
        mmOutputStream.close(); 
       } 
       if (mbuffStream != null) { 
        mbuffStream.close(); 
       } 
       if (mmSocket != null) { 
        mmSocket.close(); 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      myLabel.setText("Bluetooth Closed"); 
     } 

     @Override 
     public void onBackPressed() { 
      closeBT(); 
      finish(); 
     } 
    } 

感謝 施拉姆中號

+0

你正在做主線程中的IO。但除此之外,我認爲它應該起作用。我將開始調試發送按鈕處理程序,並將接收到的數據記錄在主機中。 –

+0

謝謝史密斯。任何方式我無法連續發送數據。如果我按下sendData按鈕,數據不會再發送。正因爲如此,我使用了Bufferedoutputstream並將大小減小到1(只發送一個字節的數據)。 – Shriram

+0

現在我再次讀你的代碼,我注意到你正在使用'BufferedOutputStream'。作爲測試,請使用常規的底層(非緩衝)流代替,以排除緩衝問題。 –

回答

0

我用非緩衝流也改變在服務器端代碼相同。它得到了工作。 感謝史密斯..