下面列出了android.media.AudioManager#AUDIOFOCUS_REQUEST_GRANTED 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Requests to obtain the audio focus
*
* @return True if the focus was granted
*/
boolean requestFocus() {
if (currentFocus == AudioManager.AUDIOFOCUS_GAIN) {
return true;
}
if (mAudioManager == null) {
return false;
}
int status = mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == status) {
currentFocus = AudioManager.AUDIOFOCUS_GAIN;
return true;
}
startRequested = true;
return false;
}
private void checkAudioFocus(MessageObject messageObject) {
int neededAudioFocus;
if (messageObject.isVoice() || messageObject.isRoundVideo()) {
if (useFrontSpeaker) {
neededAudioFocus = 3;
} else {
neededAudioFocus = 2;
}
} else {
neededAudioFocus = 1;
}
if (hasAudioFocus != neededAudioFocus) {
hasAudioFocus = neededAudioFocus;
int result;
if (neededAudioFocus == 3) {
result = NotificationsController.audioManager.requestAudioFocus(this, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
} else {
result = NotificationsController.audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, neededAudioFocus == 2 ? AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK : AudioManager.AUDIOFOCUS_GAIN);
}
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
audioFocus = AUDIO_FOCUSED;
}
}
}
/**
* Requests to obtain the audio focus
*
* @return True if the focus was granted
*/
public boolean requestFocus() {
if (!handleAudioFocus || currentFocus == AudioManager.AUDIOFOCUS_GAIN) {
return true;
}
if (audioManager == null) {
return false;
}
int status = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == status) {
currentFocus = AudioManager.AUDIOFOCUS_GAIN;
return true;
}
startRequested = true;
return false;
}
/**
*
* @return 0:success; 1:failed;
*/
private int getAudioTrackFocus() {
// Request audio focus for playback
int result =
mAM.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
LogUtil.d(TAG, "audio track get successfully!");
return 0;
} else {
LogUtil.d(TAG, "audio track get failed!");
return -1;
}
}
private int getTTSAudioTrackFocus(int ttsType) {
setTTSType(ttsType);
if (ttsType == PCMPlayerUtils.TTS_TYPE_VR) {
return 0;
}
int audioFocusType;
audioFocusType = AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK;
int ttsAudioTrackType = VehicleFactoryAdapter.getInstance().getTTSAudioTrackStreamType();
int result = mAM.requestAudioFocus(mTTSAudioFocusListener, ttsAudioTrackType, audioFocusType);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
LogUtil.d(TAG, "tts audio track get successfully!");
return 0;
} else {
LogUtil.d(TAG, "tts audio track get failed!");
return -1;
}
}
private boolean setPlaying(boolean playing, boolean resetFocus) {
if (player.isPlaying() != playing) {
if (resetFocus && player.isAudioPresent()) {
if (playing) {
if (audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)
!= AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
return false;
}
} else {
audioManager.abandonAudioFocus(this);
}
}
player.setPlaying(playing);
pausedByTransientLossOfFocus = false;
}
return true;
}
/**
* Requests audio focus with the goal of pausing any existing audio player.
* Additionally mutes the music stream, since some audio players might
* ignore the focus request.
* In other words, during the pause no sound will be heard,
* but whether the audio resumes from the same position after the pause
* depends on the audio player.
*/
public void pause() {
if (!isPausing) {
int result = mAudioManager.requestAudioFocus(mAfChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.i("AUDIOFOCUS_REQUEST_GRANTED");
}
if (mIsMuteStream) {
mCurrentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
if (mCurrentVolume > 0) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);
}
}
isPausing = true;
}
}
@Override
public void abandonCallAudioFocus() {
if (audioFocusRequest == null) {
Log.w(TAG, "Don't currently have audio focus. Ignoring...");
return;
}
int result = audioManager.abandonAudioFocusRequest(audioFocusRequest);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "Audio focus abandon failed. Result code: " + result);
}
audioFocusRequest = null;
}
/**
* Try to get the system audio focus.
*/
private void tryToGetAudioFocus() {
LogUtils.d(TAG, "tryToGetAudioFocus");
if (mAudioFocus != AUDIO_FOCUSED) {
int result = mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mAudioFocus = AUDIO_FOCUSED;
}
}
}
/**
* Requests the audio focus to the Audio Manager
*/
private void tryToGetAudioFocus() {
if (mAudioFocus != AudioFocus.FOCUS
&& mAudioManager != null
&& (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.requestAudioFocus( this,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN))
) {
mAudioFocus = AudioFocus.FOCUS;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExoPlayerAdapter playerAdapter = new ExoPlayerAdapter(getActivity());
playerAdapter.setAudioStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
mMediaPlayerGlue = new VideoMediaPlayerGlue(getActivity(), playerAdapter);
mMediaPlayerGlue.setHost(mHost);
AudioManager audioManager = (AudioManager) getActivity()
.getSystemService(Context.AUDIO_SERVICE);
if (audioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "video player cannot obtain audio focus!");
}
mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.NONE);
MediaMetaData intentMetaData = getActivity().getIntent().getParcelableExtra(
VideoExampleActivity.TAG);
if (intentMetaData != null) {
mMediaPlayerGlue.setTitle(intentMetaData.getMediaTitle());
mMediaPlayerGlue.setSubtitle(intentMetaData.getMediaArtistName());
mMediaPlayerGlue.getPlayerAdapter().setDataSource(
Uri.parse(intentMetaData.getMediaSourcePath()));
} else {
mMediaPlayerGlue.setTitle("Diving with Sharks");
mMediaPlayerGlue.setSubtitle("A Googler");
mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(URL));
}
PlaybackSeekDiskDataProvider.setDemoSeekProvider(mMediaPlayerGlue);
playWhenReady(mMediaPlayerGlue);
setBackgroundType(BG_LIGHT);
}
public boolean removeAudioFocus() {
try {
if (audioManager != null) {
return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == audioManager.abandonAudioFocus(this);
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
public boolean requestAudioFocus() {
RunMediaPlayer.playSilentSound(ContextHolder.getContext());
final int request;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && mFocusRequest != null) {
request = audioManager.requestAudioFocus(mFocusRequest);
} else {
request = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
return (request == AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
}
public void playMediaItem(MediaMetaData mediaItemToPlay) {
if (mediaItemToPlay == null) {
throw new IllegalArgumentException("mediaItemToPlay is null!");
}
int mediaItemPos = findMediaItemPosition(mediaItemToPlay);
if (mediaItemPos == -1) {
throw new IllegalArgumentException("mediaItemToPlay not found in the media item list!");
}
if (mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.e(TAG, "playMediaItem cannot obtain audio focus!");
return;
}
if (!mMediaSession.isActive()) {
mMediaSession.setActive(true);
}
if (mCurrentMediaItem != null && mInitialized &&
mCurrentMediaItem.getMediaSourceUri().equals(mediaItemToPlay.getMediaSourceUri())) {
if (!isPlaying()) {
// This media item had been already playing but is being paused. Will resume the player.
// No need to reset the player
play();
}
} else {
mCurrentMediaPosition = mediaItemPos;
notifyMediaItemChanged(mediaItemToPlay);
prepareNewMedia();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExoPlayerAdapter playerAdapter = new ExoPlayerAdapter(getActivity());
playerAdapter.setAudioStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE);
mMediaPlayerGlue = new VideoMediaPlayerGlue(getActivity(), playerAdapter);
mMediaPlayerGlue.setHost(mHost);
AudioManager audioManager = (AudioManager) getActivity()
.getSystemService(Context.AUDIO_SERVICE);
if (audioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN) != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.w(TAG, "video player cannot obtain audio focus!");
}
mMediaPlayerGlue.setMode(PlaybackControlsRow.RepeatAction.NONE);
MediaMetaData intentMetaData = getActivity().getIntent().getParcelableExtra(
VideoExampleActivity.TAG);
if (intentMetaData != null) {
mMediaPlayerGlue.setTitle(intentMetaData.getMediaTitle());
mMediaPlayerGlue.setSubtitle(intentMetaData.getMediaArtistName());
mMediaPlayerGlue.getPlayerAdapter().setDataSource(
Uri.parse(intentMetaData.getMediaSourcePath()));
} else {
mMediaPlayerGlue.setTitle("Diving with Sharks");
mMediaPlayerGlue.setSubtitle("A Googler");
mMediaPlayerGlue.getPlayerAdapter().setDataSource(Uri.parse(URL));
}
PlaybackSeekDiskDataProvider.setDemoSeekProvider(mMediaPlayerGlue);
playWhenReady(mMediaPlayerGlue);
setBackgroundType(BG_LIGHT);
}
/**
* @return 音频焦点
*/
private boolean requestFocus() {
if (!isAudio) {
MediaManager.playSilentSound(this);
}
int request;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
request = audioManager.requestAudioFocus(mFocusRequest);
} else {
request = audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
return (request == AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
}
private void requestAudioFocus(int stream){
if (!mAudioFocused){
int res = mAudioManager.requestAudioFocus(null, stream, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT );
Log.d("Audio focus requested: " + (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED ? "Granted" : "Denied"));
if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) mAudioFocused=true;
}
}
/**
* Jumps playback to the given index and position inside the song (in milliseconds)
*
* @param index Position of the song to play
* @param jumpTime Position inside the song (milliseconds)
*/
public void jumpToIndex(int index, int jumpTime) {
// Cancel possible alerts registered within the AlarmManager
cancelQuitAlert();
// Stop playback before starting a new song. This ensures state safety
mPlayer.stop();
// Set mCurrentPlayingIndex to new song after checking the bounds
if (index < mCurrentList.size() && index >= 0) {
mCurrentPlayingIndex = index;
/*
* Make sure service is "started" so android doesn't handle it as a
* "bound service"
*/
Intent serviceStartIntent = new Intent(this, PlaybackService.class);
serviceStartIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(serviceStartIntent);
} else {
startService(serviceStartIntent);
}
// Get the item that is requested to be played.
TrackModel item = mCurrentList.get(mCurrentPlayingIndex);
// Request audio focus before doing anything
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// Abort command if audio focus was not granted
return;
}
// Notify the PlaybackServiceStatusHelper that a new media session is started
mPlaybackServiceStatusHelper.startMediaSession();
// Try to start playback of the track url.
try {
mPlayer.play(item.getTrackURL(), jumpTime);
} catch (GaplessPlayer.PlaybackException e) {
// Handle an error of the play command
handlePlaybackException(e);
}
// Sets the mNextPlayingIndex to the index just started, because the PlaybackStartListener will
// set the mCurrentPlayingIndex to the mNextPlayingIndex. This ensures that no additional code
// is necessary to handle playback start
mNextPlayingIndex = index;
} else if (index < 0 || index > mCurrentList.size()) {
// Invalid index
stop();
}
}
private boolean requestAudioFocus() {
final int result = mAudioManager.requestAudioFocus(this,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
return result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
}
public void requestAudioFocus() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
if (hasAudioFocus) {
return;
}
if (audioManager != null) {
AudioAttributes playbackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) // CONTENT_TYPE_SPEECH
.build();
focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(playbackAttributes)
.setAcceptsDelayedFocusGain(true)
// .setWillPauseWhenDucked(true)
.setOnAudioFocusChangeListener(this)
.build();
int res = audioManager.requestAudioFocus(focusRequest);
synchronized(focusLock) {
if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
playbackNowAuthorized = false;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
playbackNowAuthorized = true;
hasAudioFocus = true;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
playbackDelayed = true;
playbackNowAuthorized = false;
}
}
Log.e(TAG, "audioRequest: " + res);
}
}
else {
int result = 0;
if (audioManager != null) {
if (hasAudioFocus) {
return;
}
result = audioManager.requestAudioFocus(this,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
}
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
hasAudioFocus = true;
}
Log.e(TAG, "audioRequest: " + result);
}
}