当前位置: 首页 > 知识库问答 >
问题:

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

轩辕涵亮
2023-03-14

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

钮才哲
2023-03-14
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();
                }
            }
        });
缪兴腾
2023-03-14

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

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

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

许远航
2023-03-14

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

 类似资料:
  • 我试图通过在扬声器和耳机之间切换按钮来播放音频。问题是,我试图将音频默认为从耳机播放,但没有结果。然后,当我按下按钮切换到扬声器时,仍然没有音频播放。我从本地原始文件播放。 我在显明书中也有android.permission.MODIFY_AUDIO_SETTINGS。 以下是我的代码: 以下是我设置 MediaPlayer 的方式:

  • 我试图让用户能够在我的应用程序中切换音频输出,我可以使用AVAudioSession在扬声器和背部之间切换,但我找不到在连接的蓝牙设备和耳机之间切换的方法,以任何顺序。 谢谢你的帮助。

  • 我想使用有线耳机作为的音频源。我阅读了诸如Android之类的问题 - 通过听筒播放音频和Android - 从听筒播放音频。最后我来: 但这不起作用。蓝牙耳机使用方法解决的问题 我没有找到替代< code > audio manager . startbluetoothsco();适用于有线耳机。能否将< code>SpeechRecognizer与有线耳机结合使用?

  • 我创建了语音通话录音应用程序,它与手机的麦克风和听筒配合得很好。但是当插入耳机时,它不能录制音频。我试图将AudioSource更改为AudioSource.default,以为它会自动接受默认音频源。它什么也没记录。

  • 我们正在开发一款需要在iOS中更改音频路由的应用程序。我们需要从麦克风输入中获取一些信息,然后切换到设备的内部麦克风以录制环境声音。 我们从这些页面中看到了两个主题:强制iPhone麦克风作为音频输入,如果耳机已插入,则使用内置麦克风,但我猜根据这种情况,没有任何定论。 现在,代码可以工作,但我们可以选择音频输入的路线。 我们在Apple(Remote IO)提供的留档中没有找到任何内容。 这有什

  • 我使用MediaPlayer通过< code>AsyncTask播放音频,并使用< code>AudioManager设置流。按下特定按钮时,我调用< code>AudioManager的< code>setSpeakerPhoneOn()进行切换,但它不会切换到耳机扬声器。我的音频总是通过主扬声器播放。 我尝试了这些解决方案(如下面的代码所示),但都不起作用: 按下按钮即可在听筒和免提电话之间切