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

时间:2014-01-06 10:29:26

标签: android soundpool android-audiomanager

我正在开发一个简单的应用程序,应该在扬声器电话和有线耳机之间切换以在按钮点击事件上播放音频。我正在尝试使用 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 个答案:

答案 0 :(得分:1)

你必须为ACTION_HEADSET_PLUG意图注册一个接收器,然后创建一个接收器类来捕获那个你可以实现自己逻辑的广播  please check this

答案 1 :(得分:1)

最后设法用这个工作来解决我自己的问题(正如@noelicus所建议的那样):

How to mute audio in headset but let it play on speaker programmatically?

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

答案 2 :(得分:1)

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