9

R.raw から音を鳴らしてみます。Thread/Runnable の内部 しかし、これを機能させることができません。

新しいランナブル(){
  public void run() {  

    // getBaseContext が null であるため、これにより NullPointerException が発生します  
    MediaPlayer mp = MediaPlayer.create( getBaseContext(), R.raw.soundfile);  

    while (真) {  
      もし何か)  
          何かをする  
    }  
  }

run メソッド内で実際のコンテキストを取得するにはどうすればよいですか? 何をやってもヌルです。または、これを行うより良い方法はありますか?

4

5 に答える 5

14

getBaseContext を使用する必要があります。代わりに、このランナブルがアクティビティ内にある場合は、次のようにコンテキストをクラス変数に格納する必要があります。

public class MainActivity extends Activity {
    private Context context;

    public void onCreate( Bundle icicle ) {
        context = this;


        // More Code
    }

    // More code

    new Runnable(){ 
        public void run() {  
            MediaPlayer mp = MediaPlayer.create(context, R.raw.soundfile);  

            while (true) {  
                if (something)  
                    play something  
            }  
        }
    }
}

また、サウンドを何度も再生するような無限ループを持つべきではありません。サウンドが短時間に何度も再生され、同じサウンドが互いに重なるのを防ぐために、そこにスリープが必要です。 .

于 2010-10-06T18:31:20.683 に答える
0

Thread を作成して Thread.start() を呼び出す必要があると思います。

于 2010-10-06T18:06:47.373 に答える
0

UI スレッドで Handler オブジェクトを宣言する必要があります。

次に、スレッドで使用します

YourHandler.post(new Runnable() {
    public void run() {
        //do something to the UI (i.e. play something)
    }});
于 2010-10-06T18:16:05.107 に答える