Как проверить и перенаправить звук между проводной гарнитурой и громкой связью?
Я разрабатываю простое приложение, которое должно переключаться между громкой связью и проводной гарнитурой, чтобы воспроизводить звук при нажатии кнопки. Я пытаюсь использовать функцию isWiredHeadsetOn(), но она говорит, что она устарела для Android API lvl 5 и выше. Так как же проверить, воспроизводится ли в данный момент звук через проводную гарнитуру, чтобы я мог перенаправить его на динамик телефона?
Примечание: я запускаю приложение с наушниками, подключенными к 3,5-мм разъему телефона.
Это моя попытка кода до сих пор:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio_re_direct);
redirect = (Button)findViewById(R.id.redirect);
final AudioManager audio =(AudioManager)getApplicationContext().getSystemService(AUDIO_SERVICE);
redirect.setOnClickListener(new View.OnClickListener() {
@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(audio.isWiredHeadsetOn())
{
audio.setWiredHeadsetOn(false);
audio.setSpeakerphoneOn(true);
Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
redirect.setText("Turn on headset");
}
else
{
audio.setSpeakerphoneOn(false);
audio.setWiredHeadsetOn(true);
Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show();
redirect.setText("Turn off headset");
}
}
});
}
Но приложение не переключается вообще. Первоначально он обнаруживает наличие проводной гарнитуры, показывает сообщение Toast SpeakerPhone On и все. Он не переключается между двумя.
Кто-нибудь, пожалуйста, помогите мне сделать эту работу. Благодарю.
3 ответа
Вы должны зарегистрировать получателя для намерения ACTION_HEADSET_PLUG и создать класс получателя, чтобы перехватывать эту трансляцию, из которой вы можете реализовать свою собственную логику, пожалуйста, отметьте это
AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mVolumeButton = (Button)findViewById(R.id.btn_Volume);
mVolumeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mAudioMgr.isWiredHeadsetOn()){
mAudioMgr.setWiredHeadsetOn(false);
mAudioMgr.setSpeakerphoneOn(true);
mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);
Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
}else{
mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioMgr.setSpeakerphoneOn(false);
mAudioMgr.setWiredHeadsetOn(true);
Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show();
}
}
});
Наконец удалось решить мою собственную проблему, используя эту работу вокруг (как предложено @noelicus):
Как отключить звук в гарнитуре, но позволить программно воспроизводить его на динамике?
Опубликовано для ссылки на других, которые могут застрять, как я.:)