代码之家  ›  专栏  ›  技术社区  ›  Michael

有没有可能忽略插入式耳机,仍然使用手机扬声器?

  •  0
  • Michael  · 技术社区  · 6 年前

    我想用 电话扬声器 插入耳机时,不要使用耳机扬声器。 enter image description here

    有可能吗?如果是,我如何实现?
    我正在用Java开发一个应用程序 安卓9 .
    到目前为止,检测耳机是否已插入工作状态:

    public class HeadsetIntentReceiver extends BroadcastReceiver {
    private String TAG = "HeadSet";
    
    public HeadsetIntentReceiver() {
        Log.d(TAG, "Created");
    }
    
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
            int state = intent.getIntExtra("state", -1);
            switch(state) {
                case(0):
                    Log.d(TAG, "Headset unplugged");
                    break;
                case(1):
                    Log.d(TAG, "Headset plugged");
                    break;
                default:
                    Log.d(TAG, "Error");
            }
        }
    }
    }
    

    编辑:
    我尝试了以下解决方案,但什么也没发生:

    1. How to mute audio in headset but let it play on speaker programmatically?
    2. How to disable the wired headset programmatically in Java

      提前谢谢你的建议。


    (请不要回答“拔下耳机”)

    1 回复  |  直到 6 年前
        1
  •  0
  •   Fleta    6 年前

    我想你在找 AudioManager

    贴上 AUDIO_SERVICE 要选择AudioManager,请将AudioManager设置为 MODE_IN_COMMUNICATION 然后打开你的扬声器。你可以像在打电话一样使用扬声器。

    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
    audioManager.setSpeakerphoneOn(true);
    

    记住使用后要恢复。 例如

    protected void onPause() {
        super.onPause();
        audioManager.setMode(AudioManager.MODE_NORMAL);
        audioManager.setSpeakerphoneOn(false);
    }
    
    推荐文章