首页 > 解决方案 > exoplayer 来电后不恢复播放

问题描述

我用 Exoplayer 2 制作了一个应用程序。我面临的问题是,当电话响起并且在来电期间音乐停止播放,但是,在来电完成后,它应该从它离开的地方恢复播放。但它不起作用,我错在哪里?

而且我还希望它在 admob interstitail 视频广告之后恢复,但不知道该怎么做?

播放器服务.java

    mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    mAudioManager.requestAudioFocus(onAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN);

    componentName = new ComponentName(getPackageName(), MediaButtonIntentReceiver.class.getName());
    mAudioManager.registerMediaButtonEventReceiver(componentName);

    try {
        registerReceiver(onCallIncome, new IntentFilter("android.intent.action.PHONE_STATE"));
        registerReceiver(onHeadPhoneDetect, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
    } catch (Exception e) {
        e.printStackTrace();
    }

private void stop(Intent intent) {
    try {
        Setting.isPlayed = false;

        exoPlayer.setPlayWhenReady(false);
        changePlayPause(false);
        exoPlayer.stop();
        exoPlayer.release();
        exoPlayer = null;
        try {
            mAudioManager.abandonAudioFocus(onAudioFocusChangeListener);
            mAudioManager.unregisterMediaButtonEventReceiver(componentName);
            unregisterReceiver(onCallIncome);
            unregisterReceiver(onHeadPhoneDetect);
        } catch (Exception e) {
            e.printStackTrace();
        }
        stopService(intent);
        stopForeground(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
BroadcastReceiver onCallIncome = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        String a = intent.getStringExtra(TelephonyManager.EXTRA_STATE);

        try {
            if (exoPlayer.getPlayWhenReady()) {
                assert a != null;
                if (a.equals(TelephonyManager.EXTRA_STATE_OFFHOOK) || a.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                    exoPlayer.setPlayWhenReady(false);
                }
                else exoPlayer.setPlayWhenReady(true);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

BroadcastReceiver onHeadPhoneDetect = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            if (exoPlayer.getPlayWhenReady()) {
                togglePlay();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

标签: androidexoplayer2.x

解决方案


推荐阅读