gpt4 book ai didi

android - MediaPlayer.start() 不能在构造函数中调用?

转载 作者:搜寻专家 更新时间:2023-11-01 08:09:06 24 4
gpt4 key购买 nike

在我的应用程序中的许多地方使用 MediaPlayer 时,我尝试减少行数,我将 MediaPlayer 子类化,并在构造函数中调用相同的 3 行,每次我需要播放媒体文件时重复:

public MyMediaPlayer(Context context, int resid) {
create(context, resid);
setOnCompletionListener(this);
start();
}

所以我只把它放在调用者中,而不是那 3 行:

new MyMediaPlayer(this, R.raw.happybirthday);

它编译构建甚至运行,但媒体文件由于某种原因无法播放。

我检查了 LogCat 并注意到:

07-19 20:00:51.124: E/MediaPlayer(16517): start called in state 1
07-19 20:00:51.124: E/MediaPlayer(16517): error (-38, 0)

这些错误是什么意思?

我错过了什么?

顺便说一句,onCompletion()被调用并运行良好。

最佳答案

这意味着:MediaPlayer 遵循一个状态图,您不能在每个状态都调用 start()。下面是状态图,您没有在 Prepared、PlaybackCompleted 或 Paused 中调用 start。

即使您在正确的状态下执行此操作,直接在 onCreate 或任何其他初始化方法中调用它也不是一个好的做法,因为这些方法是为初始化您的布局和应用程序而保留的。

您可以在 onCreate() 或 onStart() 之一中执行以下操作,以确保在它们完成后播放。

// delaying play until after all application initialization is done
findViewById(R.id.main_page_layout).post(new Runnable() {
public void run() {
//play your music here
}
});

enter image description here

关于android - MediaPlayer.start() 不能在构造函数中调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com