2

ボタンをクリックする (2 秒) だけで再生されるサウンドバイトがあります。完了したら、新しいアクティビティを呼び出し、メディア プレーヤーをリリースしました。

しかし、私のアプリはこれでクラッシュします。

私のコード

final ImageButton TtriangleButton=(ImageButton)findViewById(R.id.triangleTriangle);
    TtriangleButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            /* Code for playing the "Very Good" sound */    
            final MediaPlayer mediaPlayer = MediaPlayer.create(shapeTriangleActivity.this, R.raw.applause);
            mediaPlayer.start();

            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {

                    Intent myintent1 = new Intent(shapeTriangleActivity.this,LearningTimeMenu.class);
                    myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(myintent1);
                    mediaPlayer.release();

                }});
        }});

私が抱えているもう1つの問題は、リリース時にNULLとmediaPlayer = nullを追加しようとしたことです。-- しかし、「囲んでいる型で定義されているため、最後のローカル変数 mediaPlayer を割り当てることができません」のようなコンパイル エラーが発生します。

これにこだわっています。助けが必要。

エラーログで更新

10-31 14:54:45.800: E/AndroidRuntime(859): android.content.res.Resources$NotFoundException: リソース ID #0x7f040006

また、私のファイルは .wav ファイルです。どちらも同じファイル サイズですが、.mp3 ファイルにはこの問題がないことに気付きました。

4

3 に答える 3

3

こうやってみる……。

-あなたはそれをすべきであり、演奏の完了後releaseに割り当てます。null

-別のサウンドを再生したい場合initializeは、メディア プレーヤーを再度使用します。

 mPlayer.start();
 mPlayer.setOnCompletionListener(new OnCompletionListener() {

 @Override
public void onCompletion(MediaPlayer mp) {

             mPlayer.release();  // 
             mPlayer = null;

        }
});

- 2 秒のサウンド クリップのみを再生している場合は、これらの種類のサウンド クリップに適しているので、これを使用SoundPoolください。SoundPool

のいくつかの制限事項を次に示します SoundPool

-サウンド ファイルは1 MBを超えないようにしてください。

-.wavサウンドファイルで最良の結果が得られます。.mp3, .mp4, .m4a

-サウンドクリップを完全に再生するには、bitrate128kb/sec および 22050KHzを使用してくださいsampling rate

于 2012-10-31T09:34:21.720 に答える
3

このような新しいアクティビティを開始する前に、メディア プレーヤーを解放してください ::

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                mediaPlayer.release();
                Intent myintent1 = new Intent(shapeTriangleActivity.this,LearningTimeMenu.class);
                myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(myintent1);


            }});
于 2012-10-31T09:18:50.830 に答える
1

最初 stop にメディアプレーヤー、次にreleaseそれ。

于 2012-10-31T10:53:43.073 に答える