2012-02-15 25 views
13

Come verificare se ci sono cuffie bluetooth collegate ad Android al momento?Come verificare se le cuffie Bluetooth sono collegate su Android?

come:

  • Se c'è un auricolare conected, il percorso deve suonare a questo auricolare

  • Ma se c'è neanche un auricolare, il suono deve rimanere in vivavoce

  • Questo deve verificare durante l'applicazione perché se la batteria dell'auricolare si spegne deve inviare l'audio al retro degli altoparlanti

soluzione qui di seguito/

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()); 
     } 
    } 
} 
+1

risolto !!!!!!! –

+0

Ho appena pulito il tuo codice e l'ho generalizzato un po 'per gli altri utenti che hanno lo stesso problema. Non pubblicare contenuti non correlati come "android.bluetooth.headset.action.FORCE_ON" o "android.bluetooth.headset.action.FORCE_OFF" (che si riferiscono alle tue azioni create dall'utente). Inoltre, non utilizzare commenti in lingua straniera, per favore. :) Btw, grazie per il codice. :) – DragonWork

+0

La soluzione migliore e più completa che ho trovato! –

risposta

0

Spostare questo per una risposta in modo che ulteriori commenti possono fatta. Funziona alla grande!

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()); 
     } 
    } 
} 
Problemi correlati