0

MediaPlayerSDカードにすべての曲が入ったオブジェクトとスピナーがあります。再生、一時停止、停止、前へ、次への各ボタンのコードを作成しようとしています。

スピナーの項目が選択されているとき、そこから MediaPlayer を取得し、そのデータ ソースを設定して準備メソッドを呼び出します。コードは次のとおりです。

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            Context context = getApplicationContext();
            CharSequence text = "onItemSelected";
            int duration = Toast.LENGTH_SHORT;

            Toast toast = Toast.makeText(context, text, duration);
            toast.show();

            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(sdcard_playlist.get(arg2));
                applyValuesToEqualizer();
                mediaPlayer.prepare();
                index = arg2;



            } catch (IllegalArgumentException e1) {
                e1.printStackTrace();
            } catch (SecurityException e1) {
                e1.printStackTrace();
            } catch (IllegalStateException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });

各停止ボタンと次へボタンのコードは次のとおりです。

public void stopSong(View view) {
    if (isPlaying) {
    mediaPlayer.reset();

    isPlaying = false;
    spinner.setSelection(index, false);  // index is the index of the chosen item from spinner
    seekbar.setProgress(0);
    } 
}

public void nextSong(View view) {
    if (isPlaying) {
        mediaPlayer.reset();
        isPlaying = false;
        spinner.setSelection(index + 1, false);
        seekbar.setProgress(0);
        playPauseSong(findViewById(R.id.pause_music_button));
    } else {
        spinner.setSelection(index + 1, false);
        seekbar.setProgress(0);
    }
}

何が起こっているかというと、nextSong() が呼び出されると、すべてが正常に機能し、onItemSelected() のトーストが表示されますが、stopSong() が呼び出されると、onItemSelected() が実行されず、トーストが表示されず、曲停止中ですが、再生ボタンをもう一度クリックすると、例外が発生します: 状態 1 で呼び出された開始、エラー (-38, 0)。これは、mediaPlayer がリセットされ、再度準備されていないためです。

前もって感謝します :)

4

2 に答える 2

0
new Handler().postDelayed(new Runnable() {        
                public void run() {
                    spinner.setSelection(index, false);
                }
              }, 100);

これを試して

于 2013-09-03T14:48:15.577 に答える