2014-01-21 2 views
0

Я пытаюсь открыть соединение с моим ноутбуком, у которого есть Bluetooth с моего телефона. В моем ноутбуке работает серверная программа. Мое намерение состояло в том, чтобы установить связь с моим ноутбуком, чтобы посылать некоторые входы непрерывно в том же созданном сокете. Соединение было успешно установлено, и байт был отправлен на сервер, работающий на моем ноутбуке, но после нажатия кнопки отправки ничего не было отправлено.получать команды uing Соединение с Bluetooth-разъемом

Приведенный ниже код отлично подходит для первой попытки. Когда я пытаюсь выполнить повторную отправку, использование того же значения байта подключения не было отправлено. Когда я запускаю свое приложение во второй раз, мой телефон повесился. Я ищу проблемы с памятью, но я не мог найти проблем с памятью. Я что-то пропустил ? Мне нужно что-то сделать.

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

Я использовал небуферизованного поток также изменили то же самое в коде на стороне сервера. он работал. Thanks Smith ..