我想使用android将文件中的音频播放到手机的耳机(或已连接的耳机)中MediaPlayer.我尝试使用此线程中建议的MODE_IN_CALL黑客 - 安卓 - 通过耳机播放音频, 但这没有帮助.该应用程序还具有android.permission.MODIFY_AUDIO_SETTINGS权限,但m_amAudioManager.setSpeakerphoneOn(false);忽略任何调用.
private AudioManager m_amAudioManager;
m_amAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
m_amAudioManager.setMode(AudioManager.MODE_IN_CALL);
m_amAudioManager.setSpeakerphoneOn(false);
Run Code Online (Sandbox Code Playgroud)
要在通话setMode(AudioManager.STREAM_VOICE_CALL);上MediaPlayer没有帮助.
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mediaPlayer.setDataSource(path);
mediaPlayer.prepare();
Run Code Online (Sandbox Code Playgroud)
自从android 2.3打破这段代码后有什么变化?我在Android ICS上尝试了代码而没有任何成功.有人能指出我正确的方向吗?到目前为止,音频总是从扬声器电话播放.
Dee*_*ala 36
事实证明,正确的方法是通过以下代码.
通过耳机播放
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
Run Code Online (Sandbox Code Playgroud)
通过扬声器电话播放
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Run Code Online (Sandbox Code Playgroud)
这就对了.任何其他解决方案(包括此处发布的解决方案 - > Android - 通过耳机播放音频)在各种设备上都不能始终如一地工作.事实上,使用MODE_IN_CALL可确保您的音频永远不会在某些设备上播放.
注意:您需要重新准备媒体播放器以更改流.
我只是想为Deepak Bala的答案添加一个完整的示例。不使用MediaPlayer.create()方法时,它可以工作:
this.player = new MediaPlayer();
this.player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
try {
this.player.setDataSource(getContext(), Uri.fromFile(new File(m.localFileUrl)));
this.player.prepare();
} catch (IllegalStateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)