【问题标题】:Android MediaPlayer not playing when switching from Activity to Fragment从 Activity 切换到 Fragment 时,Android MediaPlayer 不播放
【发布时间】:2016-12-06 18:53:06
【问题描述】:

我在 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 并传递它所在的位置以便它可以从那里开始。

【问题讨论】:

    标签: android android-fragments service android-mediaplayer


    【解决方案1】:

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

    您可能需要通过调用startService() 而不是bindService() 来启动您的服务。

    如果是这种情况,您可能想在此处阅读有关服务的更多信息:Services Documentation

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

    【讨论】:

    • 我以 bindService() 开头,所以我必须以 startService 开头并绑定到它?
    • 是的。如视频中所述,如果您想在某一时刻停止服务,请务必遵守startService()bindService()unbindService()stopService() 的顺序。
    • 我在一个活动上使用了 startService(),后来我必须在一个片段中绑定到它,我如何在片段上获取该服务的引用?
    • 您需要从持有该片段的活动绑定到服务,然后在活动片段之间传递您需要的信息。为您的活动处理绑定的超类可能是个好主意。
    猜你喜欢
    • 2012-11-27
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多