1

いくつかのアイテムを含む ListView があり、各アイテムは特定のサウンドを再生します。これはコードです:

listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
            long arg3) {
            try {
                player.setDataSource(externalStoragePath + "/Android/data/com.whizzappseasyvoicenotepad/" + recordedFilesArray.get(arg2) + ".mp3");
                player.prepare();
                player.start();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

アイテムをクリックして再生を開始し、前にクリックしたアイテムの再生が終了する前に別のアイテムをクリックすると、MediaPlayer は両方のサウンドを同時に再生します。再生が停止する前にアイテムをクリックした場合、MediaPlayer で以前のサウンドの再生を stop() し、新しいサウンドの再生を開始するにはどうすればよいですか?

試す前に player.Stop() を追加しようとしたので、アイテムをクリックするたびに、新しいソースを設定して再開する前に MediaPlayer が停止しますが、それは前のサウンドを停止するだけで、新しいサウンドを再生しません。

また、次のように IF ステートメントを追加してみました。

if (!player.isPlaying()){
//normally start the player
}
else if (player.isPlaying()){
//stop it before starting it again
}

実際のコードをコピーしますが、機能しなかったため、既に削除しました。また、以前のサウンドを停止し、新しいサウンドを再生しませんでした。

4

4 に答える 4

1

曲を停止した後、プレーヤーをリセットします。

  listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
        try {
             if (player!=null && player.isPlaying())
              {                     
               player.stop();
               player.reset();
              }

            player.setDataSource(externalStoragePath +     "/Android/data/com.whizzappseasyvoicenotepad/" + recordedFilesArray.get(arg2) + ".mp3");
            player.prepare();
            player.start();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
});
于 2013-08-19T06:56:21.063 に答える
0

を再利用するには、 new を設定する前にMediaPlayer呼び出す必要があります。もう 1 つ、UI スレッドで呼び出さないでください。エラーが発生する可能性があります。むしろ関数を呼び出します。reset()dataSourceprepare()ANRprepareAsync()

于 2013-08-19T11:13:57.543 に答える