2013-03-20 41 views
0

我有這個秒錶,30秒,45秒和60秒後需要播放聲音。30秒後通過天文臺播放聲音

這裏是我的代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.random1); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

    Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/tele.ttf"); 
    TextView tv = (TextView) findViewById(R.id.bowman); 
    tv.setTypeface(tf); 
    mChronometer = (Chronometer) findViewById(R.id.chronometer1); 
    player1 = MediaPlayer.create(Random1.this, R.raw.stopwatch1); 
    player2 = MediaPlayer.create(Random1.this, R.raw.stopwatch2); 
    player3 = MediaPlayer.create(Random1.this, R.raw.stopwatch3); 
    player4 = MediaPlayer.create(Random1.this, R.raw.stopwatch4); 
    start = (Button) findViewById(R.id.bstartsw1); 
    stop = (Button) findViewById(R.id.bstopsw1); 
    reset = (Button) findViewById(R.id.bresetsw1); 
    vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    start.setTypeface(tf); 
    stop.setTypeface(tf); 
    reset.setTypeface(tf); 

    start.setOnClickListener(this); 
    stop.setOnClickListener(this); 
    reset.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.bstartsw1: 
     mChronometer.start(); 
     vib.vibrate(50); 

     break; 
    case R.id.bstopsw1: 
     mChronometer.stop(); 
     vib.vibrate(50); 

     break; 
    case R.id.bresetsw1: 
     mChronometer.setBase(SystemClock.elapsedRealtime()); 
     vib.vibrate(50); 
     finish(); 
     startActivity(getIntent()); 
     break; 
    } 

    mChronometer 
      .setOnChronometerTickListener(new OnChronometerTickListener() { 
       @Override 
       public void onChronometerTick(Chronometer chronometer) { 
        long elapsedTime = SystemClock.elapsedRealtime() 
          - chronometer.getBase(); 
        if (elapsedTime > currentNeededTime1) { 
         player1.start(); 
         currentNeededTime1 += currentNeededTime1 == 14500 ? 3600000 
           : 3600000; 
        } else if (elapsedTime > currentNeededTime2) { 
         player2.start(); 
         currentNeededTime2 += currentNeededTime2 == 30000 ? 3600000 
           : 3600000; 
        } else if (elapsedTime > currentNeededTime3) { 
         player3.start(); 
         currentNeededTime3 += currentNeededTime3 == 45000 ? 3600000 
           : 3600000; 

        } else if (elapsedTime > currentNeededTime4) { 
         player4.start(); 
         currentNeededTime4 += currentNeededTime4 == 60000 ? 3600000 
           : 3600000; 
        } 
       } 
      }); 

} 

}

不是最有名的解決方案,但它的解決方案。 在重置按鈕我設置完成(); startActivity(getIntent()); 因此,它會按照我的意願重新加載15,30,45和60個secons上的活動和聲音。

回答

1

您需要在您的天文臺上實施OnChronometerTickListener

下面是一個例子:

chronometer.setOnChronometerTickListener(new OnChronometerTickListener() 
{ 
    @Override 
    public void onChronometerTick(Chronometer chronometer) 
    { 

    } 
}); 

您可以檢查ellapsed時間onChronometerTick方法

+1

我有完全實現這種方式和'onChronometerTick'永遠不會被調用。 – Marek 2015-03-28 10:09:57