提问者:小点点

如何在有线耳机和免提电话之间检查和重定向音频?


我正在开发一个简单的应用程序,它应该在扬声器电话和有线耳机之间切换,以播放按钮点击事件的音频。我正在尝试使用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消息扬声器打开,就这样。它不会在两者之间切换。

有人请帮我把这件事做好。谢谢


共3个答案

匿名用户

您必须为ACTION_HEADSET_PLUG意图注册一个接收器,并创建一个接收器类来捕获该广播,您可以从中实现自己的逻辑,请检查此

匿名用户

最后设法解决了我自己的问题,使用这个工作(由@noelicus建议):

如何将耳机中的音频静音,但通过编程让它在扬声器上播放?

张贴以供其他可能像我一样陷入困境的人参考。:)

匿名用户

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