Как проверить и перенаправить звук между проводной гарнитурой и громкой связью?

Я разрабатываю простое приложение, которое должно переключаться между громкой связью и проводной гарнитурой, чтобы воспроизводить звук при нажатии кнопки. Я пытаюсь использовать функцию 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):

Как отключить звук в гарнитуре, но позволить программно воспроизводить его на динамике?

Опубликовано для ссылки на других, которые могут застрять, как я.:)

Другие вопросы по тегам