下面列出了android.media.AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onAudioFocusChange(int focusChange) {
Log.i("LingJu", "焦点状态:" + focusChange);
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
isFocus = false;
mAudioManager.abandonAudioFocus(mFocusChangeListener);
break;
case AudioManager.AUDIOFOCUS_GAIN:
Log.i("LingJu", "MainActivity onAudioFocusChange()");
isFocus = true;
break;
}
}
private static String focusChangeToString(int focus) {
switch(focus) {
case AudioManager.AUDIOFOCUS_NONE:
return "none";
case AudioManager.AUDIOFOCUS_GAIN:
return "GAIN";
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
return "GAIN_TRANSIENT";
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
return "GAIN_TRANSIENT_MAY_DUCK";
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE:
return "GAIN_TRANSIENT_EXCLUSIVE";
case AudioManager.AUDIOFOCUS_LOSS:
return "LOSS";
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
return "LOSS_TRANSIENT";
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
return "LOSS_TRANSIENT_CAN_DUCK";
default:
return "[invalid focus change" + focus + "]";
}
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
onGankAudio();
break;
case AudioManager.AUDIOFOCUS_LOSS:
onLossAudio();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
onLossTransientAudio();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
onLossTransientCanDuck();
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
Log.e(TAG, "audioFocusChangeListener.onAudioFocusChange>>>>>>>>>>>>>>>>>>" + focusChange);
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// pauseSpeaking();
break;
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
/*if (isSpeaking()) {
synthesizer.resumeSpeaking();
}*/
break;
default:
break;
}
}
public void onAudioFocusChange(int focusChange) {
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
switch (focusChange) {
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK):
// Lower the volume while ducking.
mediaPlayer.setVolume(0.2f, 0.2f);
break;
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT):
mediaPlayer.pause();
break;
case (AudioManager.AUDIOFOCUS_LOSS):
mediaPlayer.stop();
am.abandonAudioFocus(this);
break;
case (AudioManager.AUDIOFOCUS_GAIN):
// Return the volume to normal and resume if paused.
mediaPlayer.setVolume(1f, 1f);
mediaPlayer.start();
break;
default:
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
break;
case AudioManager.AUDIOFOCUS_LOSS:
releaseAllVideos();
Log.d(TAG, "AUDIOFOCUS_LOSS [" + this.hashCode() + "]");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
try {
JZVideoPlayer player = JZVideoPlayerManager.getCurrentJzvd();
if (player != null && player.currentState == JZVideoPlayer.CURRENT_STATE_PLAYING) {
player.startButton.performClick();
}
} catch (IllegalStateException e) {
e.printStackTrace();
}
Log.d(TAG, "AUDIOFOCUS_LOSS_TRANSIENT [" + this.hashCode() + "]");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
abandonAudioFocus();
mPlayOnAudioFocus = false;
emitter.onStop();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
if (MusicControlModule.INSTANCE.isPlaying()) {
mPlayOnAudioFocus = true;
emitter.onPause();
}
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
volume.setCurrentVolume(40);
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
if (volume.getCurrentVolume() != 100) {
volume.setCurrentVolume(100);
}
if (mPlayOnAudioFocus) {
emitter.onPlay();
}
mPlayOnAudioFocus = false;
}
}
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
LogUtil.d(TAG, "tts AUDIOFOCUS_LOSS");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
setTTSAudioFocusStatus(false);
mAM.abandonAudioFocus(mTTSAudioFocusListener);
LogUtil.d(TAG, "tts AUDIOFOCUS_LOSS_TRANSIENT");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
setTTSAudioFocusStatus(false);
LogUtil.d(TAG, "tts AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
break;
case AudioManager.AUDIOFOCUS_GAIN:
setTTSAudioFocusStatus(true);
LogUtil.d(TAG, "tts AUDIOFOCUS_GAIN");
break;
default:
break;
}
}
@Override
public void onAudioFocusChange(int focus){
Log.v(TAG, "Audio focus changed");
switch(focus) {
case AudioManager.AUDIOFOCUS_LOSS:
// Another app has gained focus;
handleFocusLost();
break;
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
handlePauseRequest();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
if (radio.isAttached()) {
handleFocusDuck();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (radio.isAttached()) {
handleMuteRequest();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
handleFocusGain();
break;
}
}
@Override
public void onAudioFocusChange(int i) {
switch (i) {
case AudioManager.AUDIOFOCUS_GAIN:
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
pauseIfPlaying();
if (currentView != null) {
currentView.setAudioIcons();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
pauseIfPlaying();
if (currentView != null) {
currentView.setAudioIcons();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
pauseIfPlaying();
if (currentView != null) {
currentView.setAudioIcons();
}
break;
}
}
@Override public void onAudioFocusChange(int focusChange) {
Timber.d("onAudioFocusChange focusChange %s", focusChange);
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
audioFocus = AUDIO_FOCUSED;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Audio focus was lost, but it's possible to duck (i.e.: play quietly)
audioFocus = AUDIO_NO_FOCUS_CAN_DUCK;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
// Lost audio focus, but will gain it back (shortly), so note whether
// playback should resume
audioFocus = AUDIO_NO_FOCUS_NO_DUCK;
playOnFocusGain = exoPlayer != null && exoPlayer.getPlayWhenReady();
break;
case AudioManager.AUDIOFOCUS_LOSS:
// Lost audio focus, probably "permanently"
audioFocus = AUDIO_NO_FOCUS_NO_DUCK;
break;
default:
break;
}
if (exoPlayer != null) {
// Update the player state based on the change
configurePlayerState();
}
}
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case FOCUS_CHANGE:
switch (msg.arg1)
{
case AudioManager.AUDIOFOCUS_LOSS:
if (mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener) !=
AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "abandonAudioFocus after AudioFocus_LOSS failed!");
}
pause();
Log.d(TAG, "AudioFocus: Received AUDIOFOCUS_LOSS.");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
Log.d(TAG, "AudioFocus: Received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Log.d(TAG, "AudioFocus: Received AUDIOFOCUS_LOSS_TRANSIENT.");
break;
case AudioManager.AUDIOFOCUS_GAIN:
Log.d(TAG, "AudioFocus: Received AUDIOFOCUS_GAIN.");
break;
}
break;
}
}
@Override
public void onAudioFocusChange(int focusState) {
Log.e("MediaPlayerService", "calling onAudioFocusChange()");
// Invoked when the audio focus of the system is updated.
switch (focusState) {
case AudioManager.AUDIOFOCUS_GAIN:
// Resume playback
Log.e("MediaPlayerService", "Audiofocus Gain");
if (mMediaPlayer == null) {
initMediaPlayer(mActiveAudio.getPath(), mActiveAudio.getCompletedTime());
}
setVolume(1.0f);
break;
case AudioManager.AUDIOFOCUS_LOSS:
// Lost focus for an unbounded amount of time: stop playback and release media player
Log.e("MediaPlayerService", "Audiofocus Loss");
pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
// Lost focus for a short time, but we have to stop
// playback. We don't release the media player because playback
// is likely to resume
Log.e("MediaPlayerService", "Audiofocus loss transient");
if (mMediaPlayer.isPlaying()) mMediaPlayer.pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Lost focus for a short time, but it's ok to keep playing
// at an attenuated level
Log.e("MediaPlayerService", "Audiofocus loss can duck");
if (mMediaPlayer.isPlaying()) setVolume(0.1f);
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
if (!handleAudioFocus || currentFocus == focusChange) {
return;
}
currentFocus = focusChange;
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
if (startRequested || pausedForLoss) {
start();
startRequested = false;
pausedForLoss = false;
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
if (isPlaying()) {
pausedForLoss = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
if (isPlaying()) {
pausedForLoss = true;
pause(true);
}
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mPlayOnAudioFocus && !isPlaying()) {
play();
} else if (isPlaying()) {
setVolume(MEDIA_VOLUME_DEFAULT);
}
mPlayOnAudioFocus = false;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
setVolume(MEDIA_VOLUME_DUCK);
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (isPlaying()) {
mPlayOnAudioFocus = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
mAudioManager.abandonAudioFocus(this);
mPlayOnAudioFocus = false;
stop();
break;
}
}
public void onAudioFocusChange(int focusChange) {
if (mPlayer != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (playbackDelayed || !userPaused) {
synchronized(focusLock) {
playbackDelayed = false;
}
boolean autostart = mPlayer.getConfig().getAutostart();
if (autostart) {
mPlayer.play();
}
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
synchronized(focusLock) {
wasInterrupted = true;
playbackDelayed = false;
}
mPlayer.pause();
hasAudioFocus = false;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
synchronized(focusLock) {
wasInterrupted = true;
playbackDelayed = false;
}
mPlayer.pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// ... pausing or ducking depends on your app
break;
}
} else {
lowerApiOnAudioFocus(focusChange);
}
}
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
// 重新获得焦点
case AudioManager.AUDIOFOCUS_GAIN:
if (isPausedByFocusLossTransient) {
// 通话结束,恢复播放
onFocusGainFromFocusLossTransient();
}else {
// 恢复音量
onFocusGain();
}
isPausedByFocusLossTransient = false;
Logger.d(TAG, "重新获得焦点");
break;
// 永久丢失焦点,如被其他播放器抢占
case AudioManager.AUDIOFOCUS_LOSS:
onFocusLoss();
abandonAudioFocus();
Logger.d(TAG, "永久丢失焦点,如被其他播放器抢占");
break;
// 短暂丢失焦点,如来电
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
onFocusLossTransient();
isPausedByFocusLossTransient = true;
Logger.d(TAG, "短暂丢失焦点,如来电");
break;
// 瞬间丢失焦点,如通知
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// 音量减小为一半
onFocusLossTransientCanDuck();
Logger.d(TAG, "瞬间丢失焦点,如通知");
break;
default:
break;
}
}
@Override
public void onAudioFocusChange(int change)
{
log("onAudioFocusChange: ", ""+change);
if ( player != null )
switch (change)
{
case AudioManager.AUDIOFOCUS_GAIN:
log("Audiofocus_gain");
restart();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
log("Transient");
// pause();
// break;
// Drop through.
case AudioManager.AUDIOFOCUS_LOSS:
log("Audiofocus_loss");
pause();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
log("Audiofocus_loss_transient_can_duck");
duck("Audio focus lost, ducking...");
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
if (currentFocus == focusChange) {
return;
}
currentFocus = focusChange;
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN://获得焦点
case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT://暂时获得焦点
if (startRequested || pausedForLoss) {
start();
startRequested = false;
pausedForLoss = false;
}
if (mMediaPlayer != null && !isMute)//恢复音量
mMediaPlayer.setVolume(1.0f, 1.0f);
break;
case AudioManager.AUDIOFOCUS_LOSS://焦点丢失
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT://焦点暂时丢失
if (isPlaying()) {
pausedForLoss = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK://此时需降低音量
if (mMediaPlayer != null && isPlaying() && !isMute) {
mMediaPlayer.setVolume(0.1f, 0.1f);
}
break;
}
}
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
// resume playback
Timber.i("AudioManager.AUDIOFOCUS_GAIN");
// player.play();
break;
case AudioManager.AUDIOFOCUS_LOSS:
// Lost focus for an unbounded amount of time: stop playback and release media player
Timber.i("AudioManager.AUDIOFOCUS_LOSS");
if(player!=null){
player.stop();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
// Lost focus for a short time, but we have to stop
// playback. We don't release the media player because playback
// is likely to resume
Timber.i("AudioManager.AUDIOFOCUS_LOSS_TRANSIENT");
if(player!=null){
player.pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// Lost focus for a short time, but it's ok to keep playing
// at an attenuated level
Timber.i("AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
break;
}
}