Reputation: 161
I am using bluetooth socket connection in my andorid app to connect to medical devices in near range.I want to connect the bluetooth socket by clicking on a particuar device on the ListView,while the bluetooth discovery is not finished yet. I am using the follwoing code to connect the bluetooth socket to connect to a device found in the bluetooth range.
BluetoothSocket mBluetoothSocket;
mBluetoothSocket = mBluetoothDevice.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805F9B34FB"));
if (mBluetoothSocket != null) {
// Device does not support Bluetooth
Log.w("MyDebugMsg", "Bluetooth Socket present");
mBluetoothAdapter.cancelDiscovery();
mDialog2 = ProgressDialog.show(HL7MedicalAppActivity.this,
"", "Connecting to device, Please wait...",
true);
new Thread(new Runnable() {
public void run() {
try {
mBluetoothSocket.connect();
} catch (IOException e) {
runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(
HL7MedicalAppActivity.this);
// Setting Dialog Title
alertDialog.setTitle("Error");
// Setting Dialog Message
alertDialog
.setMessage("Connection refused by remote device");
// Setting OK Button
alertDialog
.setPositiveButton(
"OK",
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int id) {
HL7MedicalAppActivity.this
.finish();
}
});
// Showing Alert Message
alertDialog.show();
}
});
// TODO Auto-generated catch block
e.printStackTrace();
}
But if I try to connect before device discovery is finished it is showing me follwing Bluetooth Socket Connect error
04-09 19:03:32.720: W/MyDebugMsg(5463): Bluetooth Socket present
04-09 19:03:32.730: I/BluetoothAdapterProperties(2879):
Callback:discoveryStateChangeCallback with state:0
04-09 19:03:32.730: I/BluetoothAdapterProperties(2879):
Callback:discoveryStateChangeCallback with state:0
04-09 19:03:32.740: V/BluetoothDiscoveryReceiver(2847): Received:
android.bluetooth.adapter.action.DISCOVERY_FINISHED
04-09 19:03:32.740: D/audio_hw_primary(177): select_devices: out_snd_device(2:
speaker) in_snd_device(0: )
04-09 19:03:32.740: D/ACDB-LOADER(177): ACDB -> send_afe_cal
04-09 19:03:32.750: W/BluetoothAdapter(5463): getBluetoothService() called with no
BluetoothManagerCallback
04-09 19:03:32.750: D/BTIF_SOCK(2879): service_uuid:
00001101-0000-1000-8000-00805f9b34fb
04-09 19:03:32.750: E/bt-btif(2879): DISCOVERY_COMP_EVT slot id:12, failed to find
channle, status:2, scn:-86134667
04-09 19:03:32.750: W/bt-btif(2879): invalid rfc slot id: 12
04-09 19:03:32.750: D/BluetoothSocket(5463): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[58]}
04-09 19:03:32.750: W/System.err(5463): java.io.IOException: read failed, socket might
closed or timeout, read ret: -1
04-09 19:03:32.750: W/System.err(5463): at
android.bluetooth.BluetoothSocket.readAll(BluetoothSocket.java:505)
04-09 19:03:32.750: W/System.err(5463): at
android.bluetooth.BluetoothSocket.readInt(BluetoothSocket.java:516)
04-09 19:03:32.750: W/System.err(5463): at
android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:320)
04-09 19:03:32.750: W/System.err(5463): at
com.example.hl7medicalapp.HL7MedicalAppActivity$4$1.run(HL7MedicalAppActivity.java:389)
04-09 19:03:32.750: W/System.err(5463): at java.lang.Thread.run(Thread.java:841)
Can anyone suggest how to connect this BT socket successfully while device discovery is going on?
Any help is highly appreciated.
Upvotes: 3
Views: 1142
Reputation: 71
You are getting error because you are trying when bluethooth is in discover mode.Discovery mode is very heavy weight process so it blocks.you should try after finishing discovery.you can show toast when user try at time of discovery so that user will wait for that time.
Upvotes: 1