2015-01-28 3 views
1

Я программирую простой Bluetooth-чат. Когда я хочу обрабатывать сокеты для приема и отправки сообщения, я не знаю, как использовать эти методы, которые я реализовал.Android Sockets

прилагаю мой код, и если кто-нибудь знает, как мне помочь ...

У меня есть методы, чтобы создать соединение с резьбой, слушать и писать с розеткой. Но я не знаю, как использовать его на основном (onCreate).

спасибо.

public class messages_activity extends Activity { 
private Button send; 
private TextView message; 
private EditText write; 

private BluetoothSocket transferSocket; 

private BluetoothAdapter mBluetoothAdapter; 
final UUID applicationUUID = UUID.fromString("27012F0C-68AF-4FBF-8DBE-6BBAF7AA432A"); 


private boolean listening = false; 



@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.messages); 
    send = (Button) findViewById(R.id.button4); 
    message = (TextView) findViewById(R.id.textView2); 
    write = (EditText) findViewById(R.id.editText); 

    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

    Intent intent = getIntent(); 
    String macAddress = intent.getStringExtra("MacAddress"); //On macAddress I receive the macAddress of the other device that I want to send and receive 

    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddress); 

    startServerSocket(mBluetoothAdapter); 
    connectToServerSocket(device, applicationUUID); 



    send.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      sendMessage(transferSocket, write.getText().toString()); //write is a textField when I write what I want to send 
     } 
    }); 



} 

//Bluetooth Socket Server Connection 

private UUID startServerSocket(BluetoothAdapter bluetooth){ 

    try{ 
     final BluetoothServerSocket btserver = bluetooth.listenUsingRfcommWithServiceRecord(mBluetoothAdapter.getName(), applicationUUID); 

     Thread acceptThread = new Thread(new Runnable() { 
      public void run() { 
       try{ 
        //Block until client connection established 
        BluetoothSocket serverSocket = btserver.accept(); 
        //Start listening for messages 
        StringBuilder incoming = new StringBuilder(); 
        listenForMessages(serverSocket, incoming); 
        //Add a reference to the socket used to send messages 
        transferSocket = serverSocket; 
       }catch (IOException e){} 
      } 
     }); 

     acceptThread.start(); 

    }catch (IOException e){} 

    return applicationUUID; 
} 



//Creating a Bluetooth client socket 
private void connectToServerSocket (BluetoothDevice device, UUID uuid){ 
    try { 
     BluetoothSocket clientSocket = device.createRfcommSocketToServiceRecord(applicationUUID); 

     //Block until server connection accept 
     clientSocket.connect(); 

     //Start listening for messages 
     StringBuilder incoming = new StringBuilder(); 
     listenForMessages(clientSocket, incoming); 


     //Add a reference to the socket used to send messages 
     transferSocket = clientSocket; 

     }catch (IOException e){} 
} 


private void sendMessage(BluetoothSocket socket, String message) { 
    OutputStream outStream; 
    try { 
     outStream = socket.getOutputStream(); 

     // Add a stop character. 
     byte[] byteArray = (message + " ").getBytes(); 
     byteArray[byteArray.length - 1] = 0; 

     outStream.write(byteArray); 
     outStream.flush(); 
    } catch (IOException e) { 
    } 
} 



private void listenForMessages(BluetoothSocket socket, StringBuilder incoming){ 
    listening = true; 
    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize]; 
    try{ 
     InputStream instream = socket.getInputStream(); 
     int bytesRead = -1; 
     while(listening){ 
      bytesRead = instream.read(buffer); 
      if(bytesRead != -1){ 
       String result = ""; 
       while((bytesRead == bufferSize) && (buffer[bufferSize-1] != 0)){ 
        result = result + new String (buffer, 0, bytesRead - 1); 
        bytesRead = instream.read(buffer); 
       } 
       result = result + new String (buffer, 0, bytesRead - 1); 
       incoming.append(result); 
       message.setText(incoming); //message is a textview to show what I've received 

      } 
      socket.close(); 
     } 
    }catch(IOException e){} 
    finally { 

    } 

} 

ответ

0

У меня нет кода, поэтому я не знаю, работает ли он.

listenForMessages показывает, что полученное сообщение вставляется в текстовое сообщение message.setText (входящее);

Это должно отображаться на экране.

Если вы хотите поговорить, вы должны делать что-то вроде:

  1. Введите текст в поле отправки, нажмите кнопку отправить.
  2. В методе onClick send.onClickListener добавьте строку в окно messagetext (окно чата), в котором отображается ваше сообщение: ME: Привет! Как дела?
  3. Затем очистить текстовое поле сообщения
  4. Метод onClick затем запускает отправку сообщения как закодированное.
  5. При получении сообщения listenForMessage должен добавить полученное сообщение в окно «Чат»: ID: сообщение. ДРУГ: Я весь снег? Вы?

Теперь вы готовы к очередному раунду сообщений.

+0

Но проблема в сокетах. Когда thread.accept() запускается, я должен иметь в transferSocket сокет, который я могу поместить в другие методы для отправки и прослушивания отправки. startServerSocket (mBluetoothAdapter); // создаем сокет для отправки и прослушивания. И теперь я должен поместить этот сокет в sendmessage (transferSocket); Но transferSocket имеет значение null. Я отлаживал, и я это видел. –

+0

О, извините. Я бы добавил код, чтобы проверить каждый шаг, который вы предпринимаете, чтобы выяснить, где он идет не так. Android.Bluetooth.BluetoothAdapter.CheckBluetoothAddress, чтобы проверить, что используемый вами MAC-адрес действителен. –

+0

Из примеров кода, которые я просмотрел, после создания адаптера bluetooth вам необходимо включить BluetoothAdapter.enable. –