Android媒体播放器:“开始调用状态0”

时间:2016-02-15 04:23:32

标签: android

我想要播放一个简单的声音。声音在模拟器上播放但在手机上播放。它说

  

开始在状态0中调用

  

错误(-38,0)

这是我到目前为止所尝试的内容:

MediaPlayer secondSound;
MediaPlayer minuteSound;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    secondSound = new MediaPlayer();
    secondSound = MediaPlayer.create(this, R.raw.everysecondsound);
    minuteSound = MediaPlayer.create(this, R.raw.everyminutesound);


    secondSound.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        public void onPrepared(MediaPlayer player) {
            player.start();
        }
    });

    minuteSound.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        public void onPrepared(MediaPlayer player) {
            player.start();
        }
    });
}

稍后在程序中,调用以下方法:

minuteSound.start();
secondSound.start();

在模拟器上,即使没有.setOnPreparedListener部分也能正常工作。模拟器正在运行API 22,手机正在运行API 19.在较旧的API中使用媒体播放器有不同的方法吗?

3 个答案:

答案 0 :(得分:2)

当您致电MediaPlayer.create()时,会自动为您拨打prepare(),如the source code所示。根据{{​​3}}: state diagram in the MediaPlayer documentation

这会让您进入准备状态。此时,当您致电start()时,您将进入已启动状态。播放完成后,您将处于播放完成状态。如果您想再次播放声音,则必须再次拨打create(),或再次拨打stop()prepare()

您会发现State Diagram of MediaPlayer更适合您想要重复播放的短曲目。

答案 1 :(得分:1)

首先,我认为你必须声明分钟MediaPayer(正如你对第二个所做的那样),这样:minuteSound = new MediaPlayer(); 试试这个并返回。如果它不起作用,也许你必须在再次调用之前释放MediaPlayer。

答案 2 :(得分:0)

问题是我的声音文件的文件格式。它们最初是 96000Hz 波形文件,我将它们更改为 44100Hz MP3文件,然后一切正常。我删除了.setOnPrepareListener部分,因为它没有它。