public void requestAudioFocus() { if (SHOULD_BUILD_FOCUS_REQUEST) { audioManager.requestAudioFocus(request); } else { audioManager.requestAudioFocus(this, STREAM_TYPE, FOCUS_GAIN_TYPE); } }
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); // Request audio focus for playback int result = am.requestAudioFocus(focusChangeListener, // Use the music stream. AudioManager.STREAM_MUSIC, // Request permanent focus. AudioManager.AUDIOFOCUS_GAIN); if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // other app had stopped playing song now , so u can do u stuff now . }
/** * @param bMute 值为true时为关闭背景音乐。 */ @TargetApi(Build.VERSION_CODES.FROYO) public static boolean muteAudioFocus(Context context, boolean bMute) { boolean bool = false; AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); if (bMute) { int result = am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); bool = result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED; } else { int result = am.abandonAudioFocus(null); bool = result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED; } return bool; } }
private void requestAudioFocus(){ PLog.d(TAG,">>requestAudioFocus<<"); AudioManager am = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); if(am!=null){ am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); } }
public class MyActivity extends Activity implements OnAudioFocusChangeListener { private AudioManager mAudioManager; @Override public void onCreate(Bundle savedInstanceState) { ... mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); ... } @Override public void onDestroy(){ super.onDestroy(); ... mAudioManager.abandonAudioFocus(this); ... } @Override public void onAudioFocusChange(int focusChange) { if(focusChange<=0) { //LOSS -> PAUSE } else { //GAIN -> PLAY } }
private int requestAudioFocusDefault() { AudioManager audioManager = Assertions.checkNotNull(this.audioManager); return audioManager.requestAudioFocus( focusListener, Util.getStreamTypeForAudioUsage(Assertions.checkNotNull(audioAttributes).usage), focusGain); }
public void startVideo() { JzvdMgr.completeAll(); Log.d(TAG, "startVideo [" + this.hashCode() + "] "); initTextureView(); addTextureView(); AudioManager mAudioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); JZUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); JZMediaManager.setDataSource(jzDataSource); JZMediaManager.instance().positionInList = positionInList; onStatePreparing(); JzvdMgr.setFirstFloor(this); }
@Override public void startVideo() { if (currentScreen == SCREEN_WINDOW_FULLSCREEN) { Log.d(TAG, "startVideo [" + this.hashCode() + "] "); initTextureView(); addTextureView(); AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); JZUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); JZMediaManager.setDataSource(jzDataSource); JZMediaManager.instance().positionInList = positionInList; onStatePreparing(); } else { super.startVideo(); } }
@Test public void requestAudioFocus_shouldReturnTheSpecifiedValue() { int value = audioManager.requestAudioFocus(listener, 999, 888); assertThat(value).isEqualTo(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); shadowOf(audioManager).setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_FAILED); value = audioManager.requestAudioFocus(listener, 999, 888); assertThat(value).isEqualTo(AudioManager.AUDIOFOCUS_REQUEST_FAILED); }
/** * 恢复暂停状态 * * @param seek 是否产生seek动作 */ @Override public void onVideoResume(boolean seek) { mPauseBeforePrepared = false; if (mCurrentState == CURRENT_STATE_PAUSE) { try { if (mCurrentPosition > 0 && getGSYVideoManager() != null) { if (seek) { getGSYVideoManager().seekTo(mCurrentPosition); } getGSYVideoManager().start(); setStateAndUi(CURRENT_STATE_PLAYING); if (mAudioManager != null && !mReleaseWhenLossAudio) { mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); } mCurrentPosition = 0; } } catch (Exception e) { e.printStackTrace(); } } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_audio_player); mLoadingView = findViewById(R.id.LoadingView); mAudioPath = getIntent().getStringExtra("videoPath"); mAVOptions = new AVOptions(); // the unit of timeout is ms mAVOptions.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000); // 1 -> hw codec enable, 0 -> disable [recommended] int codec = getIntent().getIntExtra("mediaCodec", 0); mAVOptions.setInteger(AVOptions.KEY_MEDIACODEC, codec); int startPos = getIntent().getIntExtra("start-pos", 0); mAVOptions.setInteger(AVOptions.KEY_START_POSITION, startPos * 1000); AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); prepare(); startTelephonyListener(); }
@Test @Config(minSdk = O) public void requestAudioFocus2_shouldReturnTheSpecifiedValue() { int value = audioManager.requestAudioFocus( new android.media.AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).build()); assertThat(value).isEqualTo(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); shadowOf(audioManager).setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_FAILED); value = audioManager.requestAudioFocus( new android.media.AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).build()); assertThat(value).isEqualTo(AudioManager.AUDIOFOCUS_REQUEST_FAILED); }
public void prepareVideo() { Log.d(TAG, "prepareVideo [" + this.hashCode() + "] "); // 解决全屏模式下的CURRENT_STATE_ERROR状态下, 点击重新加载后退出了全屏模式. // 间接解决因为mediaplayer状态混乱(全屏模式下会prepare, 全屏模式被退出后小窗口状态异常,被点击后容易导致)引起的App Crash问题 if (currentScreen != SCREEN_WINDOW_FULLSCREEN) { if (JCVideoPlayerManager.listener() != null) { JCVideoPlayerManager.listener().onCompletion(); } } JCVideoPlayerManager.setListener(this); addTextureView(); AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); JCUtils.scanForActivity(getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); JCMediaManager.instance().prepare(url, mapHeadData, looping); JCMediaManager.instance().bufferPercent = 0; JCMediaManager.instance().videoRotation = 0; setUiWitStateAndScreen(CURRENT_STATE_PREPARING); }
@Override protected void startPrepare() { if (getGSYVideoManager().listener() != null) { getGSYVideoManager().listener().onCompletion(); } if (mVideoAllCallBack != null) { Debuger.printfLog("onStartPrepared"); mVideoAllCallBack.onStartPrepared(mOriginUrl, mTitle, this); } getGSYVideoManager().setListener(this); getGSYVideoManager().setPlayTag(mPlayTag); getGSYVideoManager().setPlayPosition(mPlayPosition); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); ((Activity) getActivityContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mBackUpPlayingBufferState = -1; //prepare通过list初始化 List<String> urls = new ArrayList<>(); for (GSYVideoModel gsyVideoModel : mUriList) { urls.add(gsyVideoModel.getUrl()); } if (urls.size() == 0) { Debuger.printfError("********************** urls isEmpty . Do you know why ? **********************"); } ((GSYExoVideoManager)getGSYVideoManager()).prepare(urls, (mMapHeadData == null) ? new HashMap<String, String>() : mMapHeadData, mLooping, mSpeed, mExoCache, mCachePath); setStateAndUi(CURRENT_STATE_PREPAREING); }
@RequiresApi(26) private int requestAudioFocusV26() { if (audioFocusRequest == null || rebuildAudioFocusRequest) { AudioFocusRequest.Builder builder = audioFocusRequest == null ? new AudioFocusRequest.Builder(focusGain) : new AudioFocusRequest.Builder(audioFocusRequest); boolean willPauseWhenDucked = willPauseWhenDucked(); audioFocusRequest = builder .setAudioAttributes(Assertions.checkNotNull(audioAttributes).getAudioAttributesV21()) .setWillPauseWhenDucked(willPauseWhenDucked) .setOnAudioFocusChangeListener(focusListener) .build(); rebuildAudioFocusRequest = false; } return Assertions.checkNotNull(audioManager).requestAudioFocus(audioFocusRequest); }
protected void startPrepare() { if (getGSYVideoManager().listener() != null) { getGSYVideoManager().listener().onCompletion(); } if (mVideoAllCallBack != null) { Debuger.printfLog("onStartPrepared"); mVideoAllCallBack.onStartPrepared(mOriginUrl, mTitle, this); } getGSYVideoManager().setListener(this); getGSYVideoManager().setPlayTag(mPlayTag); getGSYVideoManager().setPlayPosition(mPlayPosition); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); ((Activity) getActivityContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mBackUpPlayingBufferState = -1; getGSYVideoManager().prepare(mUrl, (mMapHeadData == null) ? new HashMap<String, String>() : mMapHeadData, mLooping, mSpeed, mCache, mCachePath, mOverrideExtension); setStateAndUi(CURRENT_STATE_PREPAREING); }
public void play(boolean createNewNextTrack) { int status = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
@Test public void requestAudioFocus_shouldRecordArgumentsOfMostRecentCall() { assertThat(shadowOf(audioManager).getLastAudioFocusRequest()).isNull(); audioManager.requestAudioFocus(listener, 999, 888); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().listener).isSameAs(listener); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().streamType).isEqualTo(999); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().durationHint).isEqualTo(888); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().audioFocusRequest).isNull(); }
@Override protected void startPrepare() { if (getGSYVideoManager().listener() != null) { getGSYVideoManager().listener().onCompletion(); } getGSYVideoManager().setListener(this); getGSYVideoManager().setPlayTag(mPlayTag); getGSYVideoManager().setPlayPosition(mPlayPosition); mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); //((Activity) getActivityContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); mBackUpPlayingBufferState = -1; getGSYVideoManager().prepare(mUrl, mMapHeadData, mLooping, mSpeed, mCache, mCachePath, null); setStateAndUi(CURRENT_STATE_PREPAREING); }
@Test @Config(minSdk = O) public void requestAudioFocus2_shouldRecordArgumentsOfMostRecentCall() { assertThat(shadowOf(audioManager).getLastAudioFocusRequest()).isNull(); AudioAttributes atts = new AudioAttributes.Builder().build(); android.media.AudioFocusRequest request = new android.media.AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(atts) .build(); audioManager.requestAudioFocus(request); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().listener).isNull(); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().streamType).isEqualTo(-1); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().durationHint).isEqualTo(-1); assertThat(shadowOf(audioManager).getLastAudioFocusRequest().audioFocusRequest) .isEqualTo(request); }