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

Android 如何检查和重定向有线耳机和扬声器电话之间的音频?,android,soundpool,android-audiomanager,Android,Soundpool,Android Audiomanager,我正在开发一个简单的应用程序,它可以在扬声器手机和有线耳机之间切换,在按键事件中播放音频。我试图使用isWiredHeadsetOn()函数,但它说,对于Android API 5级以后的版本,这是不推荐的。那么,如何通过有线耳机检查当前是否正在播放音频,以便将其重定向到手机扬声器 注意:我在启动应用程序时,将耳机插入手机的3.5毫米插孔 这是我迄今为止对代码的尝试: protected void onCreate(Bundle savedInstanceState) { super.o

我正在开发一个简单的应用程序,它可以在扬声器手机和有线耳机之间切换,在按键事件中播放音频。我试图使用isWiredHeadsetOn()函数,但它说,对于Android API 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信息扬声器打开,就这样。它不会在两者之间切换


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

您必须注册一个用于操作\u耳机\u插头目的的接收器,并创建一个接收器类来捕获广播,您可以实现自己的逻辑

最终,我通过这种变通方法解决了自己的问题(正如@noelicus所建议的):


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

是的,但我如何通过编程启用和禁用有线耳机?好吧,
setWiredHeadsetOn
自API级别5以来一直被弃用,因此它无法工作。有没有其他替代方案?如果您知道可以浏览
AudioManager
TelephonyManager
类的源代码,请发布,然后使用反射来完成您想要的操作。我没有使用这些类的反射示例,但您可以搜索示例。我想知道您是否已将音频输入(麦克风设备)重定向到麦克风耳机,因为我希望它连接到3.5毫米插孔时,能够将音频输入和输出重定向到耳机。答复
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();
                }
            }
        });