How to Verify whether bluetooth headsets are connected on Android?
Moving this to an answer so that further comments can made. Works great!
public class BluetoothReceiver extends BroadcastReceiver { private AudioManager localAudioManager; private static final int STATE_DISCONNECTED = 0x00000000; private static final String EXTRA_STATE = "android.bluetooth.headset.extra.STATE"; private static final String TAG = "BluetoothReceiver"; private static final String ACTION_BT_HEADSET_STATE_CHANGED = "android.bluetooth.headset.action.STATE_CHANGED"; private static final String ACTION_BT_HEADSET_FORCE_ON = "android.bluetooth.headset.action.FORCE_ON"; private static final String ACTION_BT_HEADSET_FORCE_OFF = "android.bluetooth.headset.action.FORCE_OFF"; @Override public void onReceive(final Context context, final Intent intent) { Log.i(TAG,"onReceive - BluetoothBroadcast"); localAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); final String action = intent.getAction(); if (action.equals(ACTION_BT_HEADSET_STATE_CHANGED)) { final int extraData = intent.getIntExtra(EXTRA_STATE, STATE_DISCONNECTED); if (extraData == STATE_DISCONNECTED) { localAudioManager.setBluetoothScoOn(false); localAudioManager.stopBluetoothSco(); localAudioManager.setMode(AudioManager.MODE_NORMAL); Log.i(TAG, "Bluetooth Headset Off " + localAudioManager.getMode()); Log.i(TAG, "A2DP: " + localAudioManager.isBluetoothA2dpOn() + ". SCO: " + localAudioManager.isBluetoothScoAvailableOffCall()); } else { localAudioManager.setMode(0); localAudioManager.setBluetoothScoOn(true); localAudioManager.startBluetoothSco(); localAudioManager.setMode(AudioManager.MODE_IN_CALL); Log.i(TAG, "Bluetooth Headset On " + localAudioManager.getMode()); Log.i(TAG, "A2DP: " + localAudioManager.isBluetoothA2dpOn() + ". SCO: " + localAudioManager.isBluetoothScoAvailableOffCall()); } } if (action.equals(ACTION_BT_HEADSET_FORCE_ON)) { localAudioManager.setMode(0); localAudioManager.setBluetoothScoOn(true); localAudioManager.startBluetoothSco(); localAudioManager.setMode(AudioManager.MODE_IN_CALL); Log.i(TAG, "Bluetooth Headset On " + localAudioManager.getMode()); Log.i(TAG, "A2DP: " + localAudioManager.isBluetoothA2dpOn() + ". SCO: " + localAudioManager.isBluetoothScoAvailableOffCall()); } if (action.equals(ACTION_BT_HEADSET_FORCE_OFF)) { localAudioManager.setBluetoothScoOn(false); localAudioManager.stopBluetoothSco(); localAudioManager.setMode(AudioManager.MODE_NORMAL); Log.i(TAG, "Bluetooth Headset Off " + localAudioManager.getMode()); Log.i(TAG, "A2DP: " + localAudioManager.isBluetoothA2dpOn() + ". SCO: " + localAudioManager.isBluetoothScoAvailableOffCall()); } }}