我正在启动一项服务,为BT设备连接/断开注册广播接收器。它似乎工作得很好。虽然,我遇到了一个问题。我需要检测BT耳机是否已连接,以便我知道当前的状态。我使用下面的代码,但它看起来不起作用:
// ...
// get BluetoothAdapter
BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
// to tell if BT headset is connected
boolean isBtHeadsetOn = false;
// if device supports BT
if (ba != null) {
// get list of paired devices
Set<BluetoothDevice> devices = ba.getBondedDevices();
if (devices != null) {
// loop through devices
for (BluetoothDevice device : devices) {
// get device class
BluetoothClass bc = device.getBluetoothClass();
if (bc == null) continue;
int devClass = bc.getDeviceClass();
// check if device is handsfree, headphones or headset
if (devClass == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE || devClass == BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES || devClass == BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET) {
// yes, it is
isBtHeadsetOn = true;
break;
}
}
}
}
// now I got my result in variable isBtHeadsetOn
// ...
我正在为Android 2.1开发,上面的代码放在Service#onCreate()中。 谢谢你的帮助。
答案 0 :(得分:0)
此代码仅为您提供已绑定的设备,但不提供连接状态。这意味着,您的手机记住的蓝牙设备......但它们可以连接或不连接。
一般来说,要了解状态,您应该捕获设备状态的更改:
<receiver android:name=".receiver.BTReceiver">
<intent-filter>
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<action android:name="android.bluetooth.device.action.BOND_STATE_CHANGED" />
</intent-filter>
如果您知道这是一个免提装置,您可以获得一个BluetoothHeadset对象,该对象实际上有一些方法可以知道连接状态: http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html