2016-11-29 84 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(); 
    } 
相關問題