2016-11-29 100 views
0

我正在制作一款用于测试手机的Android应用程序,并且我需要能够在插入耳机时通过耳机扬声器播放铃声。当耳机未插入时,我可以通过耳机扬声器播放铃声插入,但不插入插入。有耳机插入时是否有通过耳机播放我的音色?我将包括无耳机工作的代码。是否可以通过带耳机的耳机播放音调?

mp = MediaPlayer.create(getApplicationContext(), R.raw.tone_1ghz_5sec); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); 
    //set to false for through headphones 
    audioManager.setSpeakerphoneOn(false); 
    mp.start(); 

在其他活动中,我使用的音频系统级给力音箱,这是这里的关键?

+1

可能的重复[如何将默认音频路由到耳机时耳机连接?](http://stackoverflow.com/questions/38461743/how-to-route-default-audio-to-ear-piece-when-headphones-are-connected) – tar

+0

谢谢你指示我到那个职位。它帮助我解决了我的问题。 – Toby

回答

1

我能够得到它的工作。无论您想通过上面的代码调用它,您都可以通过耳机扬声器或打电话给扬声器。如果您想通过电话扬声器仍然播放它,即使插入了耳机,也可以这样做:

AudioManager manager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); 
    Class<?> cl = null; 
    try { 
     cl = Class.forName("android.media.AudioManager"); 
     setDeviceConnectionState = cl.getMethod("setWiredDeviceConnectionState", new Class[] { 
       Integer.TYPE, Integer.TYPE, String.class }); 
     //4 is for the headset with microphone 8 is for headset without microphone 
     //0 is for off and 1 is for on 
     setDeviceConnectionState.invoke(manager, new Object[] { 4 , 0, "device" }); 
     setDeviceConnectionState.invoke(manager, new Object[] { 8 , 0, "device" }); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    }