1

この問題があります。再生したいオーディオがあります...

そして、「再生」と「停止」の2つのボタンがあります。

問題は、停止ボタンを押してから再生ボタンを押しても何も起こらないことです。-停止ボタンで曲を停止しますが、再生ボタンで曲をもう一度再生したい(最初から)コードは次のとおりです。

final MediaPlayer mp = MediaPlayer.create(this, R.raw.megadeth);

そして、2つのパブリックonclicks:

(演奏用...)

 button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
             button.setText("Playing!");
             try {
     mp.prepare();
    } catch (IllegalStateException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
             mp.start();
             //
            }
        });

そして、トラックを停止するために...

    final Button button2 = (Button) findViewById(R.id.cancel);
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

         mp.stop();
         mp.reset();

        }
    });

誰かがこれの問題を見ることができますか?もしそうなら、あなたはそれを修正してください...(提案のために)

どうもありがとう...

ジェームズ

4

3 に答える 3

1

prepare()またはpreparAsync()前に電話する必要がありますstart()

詳細については、APIを参照してください(状態図を参照してください)。

于 2010-04-22T17:53:53.550 に答える
1

Androidのドキュメントにバグがあります。このページではstop()、「生のリソース」メディアプレーヤーを呼び出して、もう一度呼び出す前に、呼び出すだけで再生reset()できるprepare()と言われていますstart()。お気づきのように、これは機能しません。

問題はreset()、オーディオソースをクリアして初期状態に戻るため、データソースを再設定する必要があることです。残念ながら、「生のリソース」データソースを設定することはできません。これには、以外にAPIがないためcreate()です。

この問題を解決するための明確な方法がわかりません。stealthcopterの方法はうまく機能しますが、start()呼び出しごとにコンテキストが必要になるため、設計に苦労します:(そして、ゲームなどのリアルタイムアプリの代償となる複雑なオブジェクトを破棄して作成する必要があります...

コンテキストがcreate()呼び出しにのみ必要になることを保証する別の方法は、次の方法でメディアプレーヤーを停止することです。

stop()
prepare()

ただし、ここでstart()を呼び出すと、最初から再起動しません。と呼ぶこともできますseekTo(0)が、前の再生位置からの音に少しノイズがあります。

私はこれについて調査を続けています。生のリソースで作成されたときにメディアプレーヤーを停止および再起動するクリーンで効率的な方法が必要です...

于 2010-10-08T19:47:32.633 に答える
0

これは私が私のプログラムで働いていることです。呼び出されるたびに異なるサウンドを使用するため、毎回メディアプレーヤーがリリースされますが、使用法の回避策として機能するはずです。

作成:

    public MediaPlayer mp=null;

起動:

    if (mp!=null){ 
            mp.reset();
            mp.release();
    }
            mp = MediaPlayer.create(test.this, soundResource);
            mp.start();

停止:

        mp.stop();

また、createメソッドはすでにprepare( API REF )を呼び出しているため、prepareを使用する必要がないことにも注意してください。

于 2010-04-23T08:47:32.770 に答える