Android 蓝牙:是不是已连接?
Posted
技术标签:
【中文标题】Android 蓝牙:是不是已连接?【英文标题】:Android Bluetooth: IsConnected?Android 蓝牙:是否已连接? 【发布时间】:2010-08-17 21:23:54 【问题描述】:有没有办法确定您是否连接到蓝牙设备?
我的应用程序连接、发送/接收都很好。但是我需要一种方法来查看我是否仍然连接说..如果我走出范围并回到范围内。
我注意到蓝牙套接字中没有 isConnected 函数,就像在 TCP 东西中一样...有没有办法查看您是否已连接,或者与您应该连接的设备通信?
【问题讨论】:
【参考方案1】:我能够解决此问题的唯一方法是每秒发送一次“心跳”消息。如果它没有通过,那么我认为蓝牙已断开连接。
【讨论】:
【参考方案2】:发送尽可能少的数据,看看是否得到响应。如果你没有,那么你没有连接。
【讨论】:
【参考方案3】:当任何 BT 设备断开连接时,以下广播接收器值会告诉您:
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); // API 5
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); // API 5
如果您对特定设备感兴趣,您可能应该实现一个 BluetoothProfile.ServiceListener 代理侦听器:
private class MyBluetoothHeadsetListener //
implements BluetoothProfile.ServiceListener
@Override
public void onServiceDisconnected(int profile)
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy)
if (profile == BluetoothProfile.A2DP)
BluetoothA2dp bluetoothA2dp = (BluetoothA2dp) proxy;
mDevicesA2dp = bluetoothA2dp.getConnectedDevices();
for (BluetoothDevice deviceA2dp : mDevicesA2dp)
boolean isA2dpPlaying = bluetoothA2dp.isA2dpPlaying(deviceA2dp);
return;
if (profile == BluetoothProfile.HEADSET)
BluetoothHeadset bluetoothHeadset = (BluetoothHeadset) proxy;
mDevicesNonA2dp = bluetoothHeadset.getConnectedDevices();
if (mDevicesNonA2dp.size() > 0)
for (BluetoothDevice deviceNonA2dp : mDevicesNonA2dp)
BluetoothClass bluetoothClass = deviceNonA2dp.getBluetoothClass();
String bluetoothDeviceClass = bluetoothClassToString(bluetoothClass);
boolean isAudioConnected = bluetoothHeadset.isAudioConnected(deviceNonA2dp);
return;
...
private MyBluetoothHeadsetListener mProfileListener = new MyBluetoothHeadsetListener();
...
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
adapter.getProfileProxy(mApp, mProfileListener, BluetoothProfile.HEADSET);
adapter.getProfileProxy(mApp, mProfileListener, BluetoothProfile.A2DP);
【讨论】:
以上是关于Android 蓝牙:是不是已连接?的主要内容,如果未能解决你的问题,请参考以下文章
Android 蓝牙开发-打开蓝牙后能不能立即连接固定地址的蓝牙设备??还是需要进行判断啥的?