android connect 蓝牙,android bluetooth can't connect

I've been having this problem for a while and haven't been able to figure it out.

I have a android application that puts all paired devices in a listview. When you click one of the list items, it will initiate a request to connect to that bluetooth device.

I can get the list of devices with their addresses no problem.

The problem is that once I try to connect I get an IOException on socket.connect();

The error message is as follows:

"connect read failed, socket might closed or timeout, read ret: -1"

Here is my code. ANY suggestions would be appreciated. I'm pretty stuck on this.

fyi: the "onEvent" methods is a library that simplifies callbacks...that part works.

When the user clicks on a list items this method is called "public void onEvent(EventMessage.DeviceSelected event)"

public class EcoDashActivity extends BaseActivity {

public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private BluetoothAdapter mBluetoothAdapter;

private int REQUEST_ENABLE_BT = 100;

private ArrayList mDevicesList;

private BluetoothDeviceDialog mDialog;

private ProgressDialog progressBar;

private int progressBarStatus = 0;

private Handler progressBarHandler = new Handler();

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.main);

mDevicesList = new ArrayList();

// Register the BroadcastReceiver

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

registerReceiver(mReceiver, filter);

setupBluetooth();

}

private void setupBluetooth() {

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (mBluetoothAdapter == null) {

// Device does not support Bluetooth

Toast.makeText(this, "Device does not support Bluetooth", Toast.LENGTH_SHORT).show();

}

if (!mBluetoothAdapter.isEnabled()) {

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

} else {

searchForPairedDevices();

mDialog = new BluetoothDeviceDialog(this, mDevicesList);

mDialog.show(getFragmentManager(), "");

}

}

private void searchForPairedDevices() {

Set pairedDevices = mBluetoothAdapter.getBondedDevices();

// If there are paired devices

if (pairedDevices.size() > 0) {

// Loop through paired devices

for (BluetoothDevice device : pairedDevices) {

// Add the name and address to an array adapter to show in a ListView

mDevices.add(device.getName() + "\n" + device.getAddress());

mDevicesList.add(device);

}

}

}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

// When discovery finds a device

if (BluetoothDevice.ACTION_FOUND.equals(action)) {

// Get the BluetoothDevice object from the Intent

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

// Add the name and address to an array adapter to show in a ListView

mDevicesList.add(device);

}

}

};

@Override

protected void onDestroy() {

super.onDestroy();

unregisterReceiver(mReceiver);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == REQUEST_ENABLE_BT) {

if (resultCode == RESULT_OK) {

Toast.makeText(this, "BT turned on!", Toast.LENGTH_SHORT).show();

searchForPairedDevices();

mDialog = new BluetoothDeviceDialog(this, mDevicesList);

mDialog.show(getFragmentManager(), "");

}

}

super.onActivityResult(requestCode, resultCode, data);

}

public void onEvent(EventMessage.DeviceSelected event) {

mDialog.dismiss();

BluetoothDevice device = event.getDevice();

ConnectThread connectThread = new ConnectThread(device);

connectThread.start();

}

public class ConnectThread extends Thread {

private final BluetoothSocket mmSocket;

private final BluetoothDevice mmDevice;

public ConnectThread(BluetoothDevice device) {

// Use a temporary object that is later assigned to mmSocket,

// because mmSocket is final

BluetoothSocket tmp = null;

mmDevice = device;

// Get a BluetoothSocket to connect with the given BluetoothDevice

try {

// MY_UUID is the app's UUID string, also used by the server code

tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

} catch (IOException e) { }

mmSocket = tmp;

}

public void run() {

setName("ConnectThread");

// Cancel discovery because it will slow down the connection

mBluetoothAdapter.cancelDiscovery();

try {

// Connect the device through the socket. This will block

// until it succeeds or throws an exception

Log.d("kent", "trying to connect to device");

mmSocket.connect();

Log.d("kent", "Connected!");

} catch (IOException connectException) {

// Unable to connect; close the socket and get out

try {

Log.d("kent", "failed to connect");

mmSocket.close();

} catch (IOException closeException) { }

return;

}

Log.d("kent", "Connected!");

}

/** Will cancel an in-progress connection, and close the socket */

public void cancel() {

try {

mmSocket.close();

} catch (IOException e) { }

}

}

Here is my logcat. Pretty short.

07-22 10:37:05.129: DEBUG/kent(17512): trying to connect to device

07-22 10:37:05.129: WARN/BluetoothAdapter(17512): getBluetoothService() called with no BluetoothManagerCallback

07-22 10:37:05.129: DEBUG/BluetoothSocket(17512): connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[98]}

07-22 10:37:40.757: DEBUG/dalvikvm(17512): GC_CONCURRENT freed 6157K, 9% free 62793K/68972K, paused 7ms+7ms, total 72ms

07-22 10:38:06.975: DEBUG/kent(17512): failed to connect

07-22 10:38:06.975: DEBUG/kent(17512): read failed, socket might closed or timeout, read ret: -1

That last line is in the "Catch" section of a try/catch...I'm just logging the error message.

Please note, there is about a 20 second gap between "trying to connect to device" and "failed to connect"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值