का उपयोग कर किसी तीसरे डिवाइस पर दो एंड्रॉइड डिवाइसों को जोड़ना मैं एक एंड्रॉइड एप्लिकेशन कर रहा हूं जहां मुझे ब्लूटूथ के माध्यम से एक डिवाइस से कनेक्ट करने में सक्षम होने के लिए 2 डिवाइस या अधिक की आवश्यकता है। एक पीयर-टू-पीयर फॉर्म में दो उपकरणों को एक साथ जोड़ने के लिए कोड काम करता है, लेकिन जब मैं किसी अन्य को जोड़ने का प्रयास करता हूं तो मुझे एक आईओएक्सप्शन मिलता है कि "कनेक्शन अस्वीकार कर दिया गया" क्योंकि सॉकेट बंद है और इस तरह, जोड़ी को पूरा करने में असमर्थ है। त्रुटि नीचे दिखाया गया है।ब्लूटूथ
Socket closed. Unable to complete pairing.
java.io.IOException: Connection refused
at android.bluetooth.BluetoothSocket.connectNative(Native Method)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:216)
at com.ablueworld.androidgridcomputingframework.BluetoothManager$ConnectAsyncTask.doInBackground(BluetoothManager.java:270)
at com.ablueworld.androidgridcomputingframework.BluetoothManager$ConnectAsyncTask.doInBackground(BluetoothManager.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Could not connect to this device
मैंने तब पढ़ा है कि प्रत्येक कनेक्शन के लिए इसे एक अलग यूयूआईडी होना चाहिए, है ना? वैसे भी, मैंने नीचे दिखाए गए अनुसार अपना कोड लिखा है, प्रत्येक नए कनेक्शन के लिए एक सरणी से एक अलग यूयूआईडी ले रहा है।
// Unique UUID for this application
private static int indexUUID = 0;
private static final UUID[] MY_UUID_SECURE = {UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d168"),
UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d169"),
UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d170"),
UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d171"),
UUID.fromString("98b97e6b-62ff-4a36-a81b-82256fd1d172")};
private static final String NAME_SECURE = "GridFrameworkSecure";
/**
* Method to connect securely to Bluetooth device using it's MAC address
* @param macAddress valid Bluetooth MAC address
*/
public boolean connectSecurelyToDevice(BluetoothAdapter btAdapter, String macAddress){
BluetoothDevice device = btAdapter.getRemoteDevice(macAddress);
ConnectAsyncTask connectTask = new ConnectAsyncTask();
BluetoothSocket deviceSocket = null;
try {
deviceSocket = connectTask.execute(device).get();
} catch (InterruptedException e) {
e.printStackTrace();
return false;
} catch (ExecutionException e) {
e.printStackTrace();
return false;
}
if(deviceSocket!=null){
if(serverBluetoothNode==null){
try {
serverBluetoothNode = new BluetoothNode(deviceSocket);
Log.i("bluetooth manager", "You are now a slave node.");
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} else {
Log.e("bluetooth manager", "You already have a master.");
return false;
}
} else return false;
}
/**
* Method to allow this Bluetooth device to accept connection from another Bluetooth device
*/
public void allowSecureConnectionFromRemoteDevice(BluetoothAdapter btAdapter){
AcceptConnectionAsyncTask acceptTask = new AcceptConnectionAsyncTask();
acceptTask.execute(btAdapter);
}
private class ConnectAsyncTask extends AsyncTask<BluetoothDevice, Void, BluetoothSocket> {
@Override
protected BluetoothSocket doInBackground(BluetoothDevice... params) {
BluetoothDevice device = params[0];
BluetoothSocket socket = null;
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
try {
socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE[indexUUID]);
} catch (IOException e) {
Log.e("Bluetooth Pairing", "create() failed", e);
}
Log.i("Bluetooth Pairing", "BEGIN ConnectThread SocketType: Secure");
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
socket.connect();
Log.i("bluetooth manager", "You have connected a slave node to this one.");
return socket;
} catch (IOException e) {
Log.e("Bluetooth Pairing", "Socket closed. Unable to complete pairing.", e);
// Close the socket
try {
socket.close();
indexUUID++;
} catch (IOException e2) {
Log.e("Bluetooth Pairing", "unable to close() socket during connection failure", e2);
}
}
return null;
}
}
private class AcceptConnectionAsyncTask extends AsyncTask<BluetoothAdapter, Void, Void> {
@Override
protected Void doInBackground(BluetoothAdapter... params) {
BluetoothServerSocket serverSocket = null;
String socketType = "Secure";
// Create a new listening server socket
try {
serverSocket = params[0].listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE[indexUUID]);
} catch (IOException e) {
Log.e("Accept Bluetooth Pairing Thread", "Socket Type: " + socketType + "listen() failed", e);
indexUUID++;
}
Log.d("Accept Bluetooth Pairing Thread", "Socket Type: " + socketType +
"BEGIN mAcceptThread" + this);
BluetoothSocket socket = null;
// Listen to the server socket if we're not connected
while (true) { //mState != STATE_CONNECTED) {
try {
// This is a blocking call and will only return on a
// successful connection or an exception
socket = serverSocket.accept();
Log.i("Slave", "server socket found");
// If a connection was accepted
if (socket != null) {
BluetoothNode node = null;
try {
node = new BluetoothNode(socket);
Log.i("connected to", node.getDeviceInformation());
slaveBluetoothNodes.add(node);
indexUUID++;
serverSocket = params[0].listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE[indexUUID]);
} catch (IOException e) {
e.printStackTrace();
indexUUID++;
serverSocket = params[0].listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE[indexUUID]);
}
}
} catch (IOException e) {
Log.e("Accept Bluetooth Pairing Thread", "Socket Type: " + socketType + "accept() failed", e);
try {
indexUUID++;
serverSocket = params[0].listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID_SECURE[indexUUID]);
} catch (IOException e1) {
Log.e("Accept Bluetooth Pairing Thread", "Socket Type: " + socketType + "listen() failed", e1);
}
}
}
}
}
लेकिन फिर भी, मैं तीसरे मोबाइल जो मैं, एक पहले से ही एक दूसरे डिवाइस के लिए एक काम ब्लूटूथ कनेक्शन है से कनेक्ट करने के रूप में नीचे दिखाया गया है कोशिश कर रहा हूँ पर एक अलग त्रुटि मिलती है।
Socket closed. Unable to complete pairing.
java.io.IOException: Service discovery failed
at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:406)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:217)
at com.ablueworld.androidgridcomputingframework.BluetoothManager$ConnectAsyncTask.doInBackground(BluetoothManager.java:270)
at com.ablueworld.androidgridcomputingframework.BluetoothManager$ConnectAsyncTask.doInBackground(BluetoothManager.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:185)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
at java.lang.Thread.run(Thread.java:1019)
Could not connect to this device
क्या कोई इसे समझने में मदद कर सकता है? धन्यवाद।
+1 अच्छा प्रश्न –
+1 साथी के लिए धन्यवाद। :) – jpmastermind