【问题标题】:Exoplayer - Plays same audio over and over on reopening the activityExoplayer - 在重新打开活动时一遍又一遍地播放相同的音频
【发布时间】:2019-07-02 14:44:03
【问题描述】:

我正在创建一个 exoplayer 实例并添加一个流 URL 作为渐进式媒体源,准备播放器并播放音频。当我回到上一个活动并再次打开播放器活动时,另一个播放器实例正在运行相同的音频(两个实例同时播放相同的音频)。我还有一个静音按钮。当我第一次打开活动时,它按预期工作。重新打开 Activity 时,静音按钮仅静音当前 Activity 的 ExoPlayer 实例

我尝试将 ExoPlayer 代码移动到另一个类并使用公共函数调用它们,但没有成功

val dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, packageName))
val newMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse("STREAM URL"));
val exoPlayer = ExoPlayerFactory.newSimpleInstance(this);
exoPlayer.prepare((newMediaSource));
exoPlayer.playWhenReady = true;

muteButton.setOnClickListener {
    if(muteButton.tag == "muted")
    {
        exoPlayer.volume = 1f;
        muteButton.tag = "unmuted";
    }
    else
    {
        exoPlayer.volume = 0f;
        muteButton.tag = "muted";
    }
}

我希望在重新打开活动时运行相同的 ExoPlayer 并静音该特定实例

【问题讨论】:

  • 覆盖onBackPressed() 并在其中调用finish()。甚至不要认为你必须打电话给finish()
  • 试过了。没用。音频仍在播放。还忘了提到我需要在后台播放音频。所以我无法阻止播放器 onBackPressed()
  • 如果你完成了活动,就不应该有对 exoplayer 的引用,除非你将 exoplayer 存储在内存中。你试过发布 exoplayer 吗?
  • 是的。但是释放播放器对我没有帮助,因为我也希望音频在后台播放
  • 那么你是在服务中运行 exoplayer 吗?你没有在问题中提到这一点。如果服务正在运行,您应该检查 Activity 的 onCreate,如果是,您应该先停止它,然后通过新文件再次启动它。

标签: android android-studio kotlin exoplayer2.x


【解决方案1】:

我最终使用共享偏好来保存服务的状态。因此,无论何时启动服务,共享首选项中的布尔值都会设置为 true。所以我只能在布尔值为假时启动服务。我也在活动和服务中使用广播接收器来交换消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多