首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer IllegalStateException

MediaPlayer IllegalStateException
EN

Stack Overflow用户
提问于 2016-03-21 16:05:32
回答 1查看 673关注 0票数 1

我已经找到了一个初始化mediaplayer的方法,并在onCreate()中声明了它;

代码语言:javascript
复制
MediaPlayer sixty,fifty,forty, thirty, twenty, fifteen, ten, five;
MediaPlayer mp1[] = {sixty,fifty,forty,thirty,twenty,fifteen,ten,five,warning};
String path[] = {"sixty","fifty","forty", "thirty", "twenty", "fifteen", "ten", "five", "warning"};`
public void InitMusic() {
    for(int i = 0; i < mp1.length; i++) {
        try {
            mp1[i] = new MediaPlayer();
            Uri ey = Uri.parse("android.resource//" + this.getPackageName() + "/" + path[i]);

            mp1[i].setDataSource(MainActivity.this, ey);
            mp1[i].setAudioStreamType(AudioManager.STREAM_MUSIC);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

还有一种每次准备音乐的方法,我想再用一次。

代码语言:javascript
复制
public void MusicPrepStart(int i) {
        mp1[i].prepareAsync();
        MusicPrepListeners(i);
}

public void MusicPrepListeners(int i) {
    switch(i){
        case 0:
            mp1[0].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[0].start();
                    mp1[0].setLooping(true);
                }
            });
            break;
        case 1:
            mp1[1].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[1].start();
                    mp1[1].setLooping(true);
                }
            });
            break;
        case 2:
            mp1[2].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[2].start();
                    mp1[2].setLooping(true);
                }
            });
            break;
        case 3:
            mp1[3].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[3].start();
                    mp1[3].setLooping(true);
                }
            });
            break;
        case 4:
            mp1[4].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[4].start();
                    mp1[4].setLooping(true);
                }
            });
            break;
        case 5:
            mp1[5].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[5].start();
                    mp1[5].setLooping(true);
                }
            });
            break;
        case 6:
            mp1[6].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[6].start();
                    mp1[6].setLooping(true);
                }
            });
            break;
        case 7:
            mp1[7].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[7].start();
                    mp1[7].setLooping(true);
                }
            });
            break;
        case 8:
            mp1[8].setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp1[8].start();
                    mp1[8].setLooping(true);
                }
            });
            break;
    }
}

然后我像这样使用这段代码。当我从70-80接收到arduino的数据时,应该准备并启动mp8,但是它会给出一个illegalStateException错误。

代码语言:javascript
复制
if (distance<=80 && distance > 70 && entered == false) {                                    
    MusicPrepStart(8);
}

LogCat

代码语言:javascript
复制
FATAL EXCEPTION: main
java.lang.IllegalStateException
android.media.MediaPlayer.prepareAsync(Native Method)
at com.ardudroid.projects.ultrasoundbelt.MainActivity.MusicPrepStart(MainActivity.java:536)
at com.ardudroid.projects.ultrasoundbelt.MainActivity$47$1.run(MainActivity.java:1622)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5071)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)

MainActivity.java:536 is mp1[i].prepareAsync(); MainActivity.java:1622 is MusicPrepStart(8),在这里实现mediaplayer有什么问题,请帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-12-22 02:27:04

数据是流的,所以它继续调用MusicPrepStart(8)

引发IllegalStateException以防止编程错误,例如调用prevent ()、prepareAsync()或在无效状态下重载的setDataSource方法之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36136059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档