如何在启动服务时检测BT耳机/耳机

时间:2012-07-18 07:11:05

标签: android bluetooth headset

我正在启动一项服务,为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()中。 谢谢你的帮助。

1 个答案:

答案 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