1
간단한 블루투스 채팅을 프로그래밍하고 있습니다. 소켓을 처리하여 메시지를 보내고 싶으면 구현 한 방법을 사용하는 방법을 모른다.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()를 실행할 수있게되면 sendSocket에 다른 메서드에서 송신 및 수신 대기 할 수있는 소켓을 가져야합니다. startServerSocket (mBluetoothAdapter); // 보내고들을 소켓을 만듭니다. 그리고 이제이 소켓을 sendmessage (transferSocket)에 넣을 수 있습니다. 그러나 transferSocket은 null입니다. 나는 디버깅을 해봤고 그것을 보았다. –
오, 죄송합니다. 내가 잘못한 부분을 찾기 위해 취하는 모든 단계를 검증하는 코드를 추가 할 것입니다. Android.Bluetooth.BluetoothAdapter.CheckBluetoothAddress를 사용하여 사용중인 Mac 주소가 유효한지 확인하십시오. –
필자가 보았던 코드 예제에서 블루투스 어댑터를 만든 후에는 BluetoothAdapter.enable을 활성화해야합니다. –