Android编程许多切换按钮使用for循环

时间:2016-12-15 19:20:58

标签: android toggle android-mediaplayer togglebutton

我的问题是当我点击一个切换按钮,正在播放mp3播放器时,当我点击它时它正在停止。因此,当我第一次尝试运行时,它可以工作。但是当我第二次点击它时会发出IllegalStateException和“E / MediaPlayer(1009):在状态32中调用attachNewPlayer”错误。我该如何解决这个问题?谢谢。
我的代码在这里:

公共类MyButtons扩展了Activity {

private static final int[] idBtns = { R.id.btn1, R.id.btn2, R.id.btn3,
        R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8, R.id.btn9 };

String[] mpUrls = new String[idBtns.length];

ToggleButton[] mbuttons = new ToggleButton[idBtns.length];

MediaPlayer mp3player = new MediaPlayer();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mybuttons);

    mp3player.setAudioStreamType(AudioManager.STREAM_MUSIC);

    for (int i = 0; i < idBtns.length; i++) {
        final int k = i;
        mbuttons[k] = (ToggleButton) findViewById(idBtns[k]);
        mpUrls[k] = "http://www.testsite.com/def-music-"+ (k + 1) + ".mp3";
    }

    for (int i = 0; i < idBtns.length; i++) {

        final int k = i;

        mbuttons[k].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                boolean on = ((ToggleButton) view).isChecked();

                if (on) {
                    try {
                        mp3player.setDataSource(mpUrls[k]);
                        mp3player.prepare();
                        mp3player.start();
                        mp3player.setLooping(true);
                    } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), e.toString(),Toast.LENGTH_LONG).show();
                    }

                } else {
                    if (mp3player.isPlaying()) {
                        mp3player.pause();
                        mp3player.seekTo(0);
                    }

                }// if(on)-else statement's end

            }// onClick's end
        });

    }// for loop's end

}

}

enter image description here

1 个答案:

答案 0 :(得分:0)

必须在空闲状态下调用setDataSource。如果您第二次单击切换按钮,则其状态不得为空闲状态。所以你应该使用媒体播放器监听器管理你的应用程序中的状态,你应该让它相应地工作。或者,您可以在每次开始播放时重置mediaplyer。但它可以提供糟糕的用户环境。 您可以参考有关有效和无效状态的文档。 https://developer.android.com/reference/android/media/MediaPlayer.html