Я программирую простой 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 {
}
}
Но проблема в сокетах. Когда thread.accept() запускается, я должен иметь в transferSocket сокет, который я могу поместить в другие методы для отправки и прослушивания отправки. startServerSocket (mBluetoothAdapter); // создаем сокет для отправки и прослушивания. И теперь я должен поместить этот сокет в sendmessage (transferSocket); Но transferSocket имеет значение null. Я отлаживал, и я это видел. –
О, извините. Я бы добавил код, чтобы проверить каждый шаг, который вы предпринимаете, чтобы выяснить, где он идет не так. Android.Bluetooth.BluetoothAdapter.CheckBluetoothAddress, чтобы проверить, что используемый вами MAC-адрес действителен. –
Из примеров кода, которые я просмотрел, после создания адаптера bluetooth вам необходимо включить BluetoothAdapter.enable. –