2015-04-10 2 views
2

Je construis un lecteur vidéo simple dans mon application.Android AudioManager, après mute ne peut pas le désactiver

Je souhaite uniquement lire l'audio via le casque et non les haut-parleurs.

, je fais ce qui suit

onCreate

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

....

@SuppressWarnings("deprecation") 
private void checkJack() { 
    if(Constants.HEADSET_ONLY && !musicReceiverStarted) { 
     Log.v(TAG + " | AudioManager checkJack", "Running checkJack()"); 
     audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
     try 
     { 

      if(!audio.isWiredHeadsetOn()) { 
       Log.v(TAG + " | AudioManager checkJack", "Headset is unplugged"); 
       audio.setStreamMute(AudioManager.STREAM_MUSIC, true); // Mute 
       Toast.makeText(DuplicatedPlayerActivity.this, "Please plug in your headset to enjoy the sound.", Toast.LENGTH_SHORT).show(); 
      } 
      else { 
       Log.v(TAG + " | AudioManager checkJack", "Headset is plugged"); 
       audio.setStreamMute(AudioManager.STREAM_MUSIC, false); // UnMute 
      } 
     } 
     catch (Exception e) { e.printStackTrace(); } 
    } 
}//end checkJack 

J'ai un récepteur:

private class MusicIntentReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { 

      musicReceiverStarted = true; 
      audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
      int state = intent.getIntExtra("state", -1); 
      switch (state) { 

       case 0: 
        Log.d(TAG + " | AudioManager", "Headset is unplugged"); 
        audio.setStreamMute(AudioManager.STREAM_MUSIC, true); // Mute 
        Toast.makeText(DuplicatedPlayerActivity.this, "Please plug in your headset to enjoy the sound.", Toast.LENGTH_SHORT).show(); 
        break; 

       case 1: 
        Log.d(TAG + " | AudioManager", "Headset is plugged"); 
        audio.setStreamMute(AudioManager.STREAM_MUSIC, false); // UnMute 
        break; 

       default: 
        Log.d(TAG + " | AudioManager", "I have no idea what the headset state is"); 
        audio.setStreamMute(AudioManager.STREAM_MUSIC, true); // Mute 
        Toast.makeText(DuplicatedPlayerActivity.this, "Please plug in your headset to enjoy the sound.", Toast.LENGTH_SHORT).show(); 
      } 
     }//end if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) 
    }//end onReceive 
}//end MusicIntentReceiver 

Maintenant, le problème est: Les deux fonctions fonctionnent correctement. mais Après l'audio a été coupé dans le checkJack(); Il ne sera pas activé dans MusicIntentReceiver();

De plus, MusicIntentReceiver() ne s'exécute que lorsqu'un état de prise est modifié. donc je ne peux pas l'utiliser pour couper l'audio pour la première fois, car il ne sera jamais exécuté.

Un conseil.

+0

Etes-vous sûr que vous ne l'avez pas deux fois coupé le flux (ou plus)? Vous devez réactiver le flux autant de fois que vous le mettez en sourdine. – Michael

Répondre

3

Rendez votre gestionnaire audio global, puis créez un booléen pour vous assurer que vous ne coupez qu'une seule fois.

voir aussi Mute the global sound in Android

private void muteAudio() {  
    audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    audio.setStreamMute(AudioManager.STREAM_NOTIFICATION, true); 
    audio.setStreamMute(AudioManager.STREAM_ALARM,   true); 
    audio.setStreamMute(AudioManager.STREAM_MUSIC,   true); 
    audio.setStreamMute(AudioManager.STREAM_RING,   true); 
    audio.setStreamMute(AudioManager.STREAM_SYSTEM,   true); 

    isAudioMuted = true; 
} 

private void unmuteAudio() { 
    audio = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 
    audio.setStreamMute(AudioManager.STREAM_NOTIFICATION, false); 
    audio.setStreamMute(AudioManager.STREAM_ALARM,   false); 
    audio.setStreamMute(AudioManager.STREAM_MUSIC,   false); 
    audio.setStreamMute(AudioManager.STREAM_RING,   false); 
    audio.setStreamMute(AudioManager.STREAM_SYSTEM,   false); 

    isAudioMuted = false; 
} 
+0

gentil, ... merci – Joolah