0

関数 play() 内の for ループを使用して、同じボタンを使用してサウンドの再生を開始および停止したいと考えています。これを行うためにロック変数を使用することを考えましたが、クリック後のボタンは関数の再生終了が実行されるまで押されたままです。解決策を提案できますか?

次のような状況があります。

public class MainActivity extends Activity {
   private static SoundPool sound;
   static int lock=1;
   int s;

   @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    sound=new SoundPool(20, AudioManager.STREAM_MUSIC, 100);
    s=sound.load(this,R.raw.bipsound, 0);
    Button button = (Button) findViewById(R.id.button);

}
public void onClick(View v) {
    switch(lock) {
        case 0: 
            lock=1;
            break;

        case 1:
            lock=0;
            play();
            break;  
    }   
}

public void play(){
    for(int i=0;i<10;i++){
        sound.play(s,1.0f, 1.0f, 1, 0, 1);
        if(lock==1)
            return;
        try {Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}
4

2 に答える 2

1

これはtry {Thread.sleep(1000);内部の問題play()です。ほとんどの場合、どちらが悪い考えであるかをメインThreadに伝えています。sleepが押された状態になり、時間が終了Buttonするまでその状態が続きます。sleep()

その行を削除します。そして、あなたがそこで何を達成しようとしているのかはわかりませんが、 、使用 、またはその他の機能などを使用Threadして個別に実行できます。さらにヘルプが必要な場合は、それで何をしようとしているのかを説明してください。TimerTaskhandler

于 2013-09-22T15:28:10.107 に答える
0

try {Thread.sleep(1000);使用していて、1秒間メインスレッドを停止するため、これは正常です。

それを行うには AsyncTask を使用する必要があります:)

これが例です。

private void goToMainActivity() {
        new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                super.onPostExecute(result);
                Intent intent = new Intent(fa, Main.class);
                startActivity(intent);
            }
        }.execute();
    }
于 2013-09-22T15:28:33.187 に答える