从Activity切换到Fragment时,Android MediaPlayer无法播放

时间:2016-12-06 18:53:06

标签: android android-fragments service android-mediaplayer

我在Android上的MediaPlayer有问题,即时启动一个使用自定义实现的服务,我有所有方法使用媒体播放器,暂停,播放等

播放器在活动中运行良好,但它有一个按钮来最小化它,因为你可以继续在每个活动上听音频,所以我必须在我在BaseActivity上创建的BaseFragment上启动或恢复音频,但它不能恢复音频。

当我关闭媒体播放器的活动时,我暂停播放器并取消注册播放器服务

AudioPlayerService.unRegister(this);

这是我将BaseFragment连接到服务的方式

//Connection with a service
private ServiceConnection mConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {

        Log.d(">>>>>", "Service starts on fragment");
        AudioPlayerService.LocalBinder mLocalBinder = (AudioPlayerService.LocalBinder) service;
        audioServiceObject = mLocalBinder.getService();
        mBounded = true;

        if (audioServiceObject != null) {
            audioServiceObject.startAudioPlayer(audio_path, media_length);
            AudioPlayerService.register(this);
            audioServiceObject.pauseAudioPlayer();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        Log.d(">>>>>", "Service end");
        mBounded = false;
        audioServiceObject = null;
    }
}; 

我在BaseActivity上调用底部玩家

PlayerBottom newAudioPlayer = new PlayerBottom();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(R.id.audioPlayerFrame, newAudioPlayer);
    transaction.commit();

并且我向底层玩家发送活动最小化时剩下的位置,所以我调用MediaPlayer.seekto并传递它离开的位置,以便它可以从那里开始。

1 个答案:

答案 0 :(得分:1)

不确定您是如何开始服务的,但我认为您是通过将其绑定到您的活动来启动它的。 当您删除活动时,它会从服务中解除绑定,从而终止它。

您可能需要致电startService()而不是bindService()来启动服务。

如果是这种情况,您可能需要在此处详细了解服务:Services Documentation

解释差异的好视频:Perf matters video