下面列出了android.media.AudioManager#AUDIOFOCUS_REQUEST_FAILED 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/** see AudioManager.dispatchFocusChange(AudioFocusInfo afi, int focusChange, AudioPolicy ap) */
int dispatchFocusChange(AudioFocusInfo afi, int focusChange) {
if (DEBUG) {
Log.v(TAG, "dispatchFocusChange " + focusChange + " to afi client="
+ afi.getClientId());
}
synchronized (mAudioFocusLock) {
if (mFocusPolicy == null) {
if (DEBUG) { Log.v(TAG, "> failed: no focus policy" ); }
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
final FocusRequester fr;
if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
fr = mFocusOwnersForFocusPolicy.remove(afi.getClientId());
} else {
fr = mFocusOwnersForFocusPolicy.get(afi.getClientId());
}
if (fr == null) {
if (DEBUG) { Log.v(TAG, "> failed: no such focus requester known" ); }
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
return fr.dispatchFocusChange(focusChange);
}
}
@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;
}
}
private void requestAudioFocus() {
if (!isAudioFocused) {
int result = audioManager.requestAudioFocus(mOnFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.d(TAG, "AudioFocus granted");
isAudioFocused = true;
} else if (result == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.d(TAG, "AudioFocus failed");
isAudioFocused = false;
}
}
}
public int abandonVRAudioFocus() {
if (mPriorityArbitrationModule == null) {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
return mPriorityArbitrationModule.abandonVRAudioFocus();
}
@Override
public int requestVRAudioFocus() {
LogUtil.d(TAG, "request VR audio focus!");
if (mAM != null) {
// abandon Navi TTS audio focus
mAM.abandonAudioFocus(mTTSAudioFocusListener);
return mAM.requestAudioFocus(mVRAudioFocusListener, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
} else {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
}
public int abandonVRAudioFocus() {
LogUtil.d(TAG, "abonden VR audio focus!");
if (mAM != null) {
return mAM.abandonAudioFocus(mVRAudioFocusListener);
} else {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
}
@Override
public int requestVRAudioFocus() {
LogUtil.d(TAG, "request VR audio focus!");
if (mAM != null) {
// abandon Navi TTS audio focus
mAM.abandonAudioFocus(mTTSAudioFocusListener);
return mAM.requestAudioFocus(mVRAudioFocusListener, VehicleFactoryAdapter.getInstance()
.getTTSAudioTrackStreamType(), AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
} else {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
}
public int abandonVRAudioFocus() {
LogUtil.d(TAG, "abonden VR audio focus!");
if (mAM != null) {
return mAM.abandonAudioFocus(mVRAudioFocusListener);
} else {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
}
private void requestAudioFocus() {
if (!isAudioFocused) {
int result = audioManager.requestAudioFocus(mOnFocusChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.d(TAG, "AudioFocus granted");
isAudioFocused = true;
} else if (result == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.d(TAG, "AudioFocus failed");
isAudioFocused = false;
}
}
}
@Override
public void onUtteranceCompleted(String utteranceId) {
int result = audioManager.abandonAudioFocus(null);
if (result == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.w(TAG, "Failed to relinquish audio focus.");
}
}
/**
* Speaks the announcement.
*
* @param announcement the announcement
*/
private void speakAnnouncement(String announcement) {
int result = audioManager.requestAudioFocus(
null, TextToSpeech.Engine.DEFAULT_STREAM, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
if (result == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.w(TAG, "Failed to request audio focus.");
}
/*
* We don't care about the utterance id. It is supplied here to force
* onUtteranceCompleted to be called.
*/
tts.speak(announcement, TextToSpeech.QUEUE_FLUSH, SPEECH_PARAMS);
}
@Override
public void onAudioFocusChange(int focusChange) {
if (focusChange == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.i(Config.LOGTAG, "Audio focus granted.");
} else if (focusChange == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
Log.i(Config.LOGTAG, "Audio focus failed.");
}
}
private void abandonAudioFocus() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
audioManager.abandonAudioFocus(audioFocusChangeListener);
} else {
if (audioFocusRequest != null && audioManager.abandonAudioFocusRequest(audioFocusRequest)
!= AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
audioFocusRequest = null;
}
}
isAudioFocusGranted = false;
}
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);
}
}
public int requestVRAudioFocus() {
if (mPriorityArbitrationModule == null) {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
return mPriorityArbitrationModule.requestVRAudioFocus();
}
public int requestVRAudioFocus() {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}
public int abandonVRAudioFocus() {
return AudioManager.AUDIOFOCUS_REQUEST_FAILED;
}