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.
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