我目前正在使用以下代码,当设备接近任何对象时,将音频流切换到耳机:
@Override
public void onSensorChanged(SensorEvent event) {
if (mAudioManager.isWiredHeadsetOn() || !(mCurrentPlaybackStatus == STATUS_PLAYING
|| mCurrentPlaybackStatus == STATUS_PREPARING)) {
return;
}
boolean isClose = event.values[0] < mSensor.getMaximumRange();
if (!mScreenDisabled && isClose) {
mAudioManager.setMode(AudioManager.STREAM_MUSIC);
mAudioManager.setSpeakerphoneOn(false);
disableScreen();
mScreenDisabled = true;
} else if (mScreenDisabled && !isClose) {
mAudioManager.setSpeakerphoneOn(true);
mAudioManager.setMode(mAudioManagerMode);
enableScreen();
mScreenDisabled = false;
}
}不幸的是,在调用.setMode(AudioManager.STREAM_MUSIC); (> 500ms)时会有明显的延迟
使用Android的默认MediaPlayer,可以立即更改输出流:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); // ear piece
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // speakerphone有什么方法可以改变ExoPlayer的输出流吗?
发布于 2017-01-17 15:14:13
要更改ExoPlayer的流类型,需要将流类型通过MediaCodecAudioTrackRenderer构造函数传递给(ExoPlayer)的AudioTrack构造函数,
public AudioTrack() {
this(null, AudioManager.STREAM_MUSIC); //default is STREAM_MUSIC
}
public AudioTrack(AudioCapabilities audioCapabilities, int streamType) {
}因此,在您的应用程序中,您将在构建渲染器时指定类型。
发布于 2017-01-17 14:59:41
通过耳机播放
mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);https://stackoverflow.com/questions/40977585
复制相似问题