Java Android:在固定时间执行方法

Java Android:在固定时间执行方法,java,android,eclipse,if-statement,dynamic,Java,Android,Eclipse,If Statement,Dynamic,我正在创建一个应用程序,它必须在固定时间播放背景音乐中的声音。到目前为止,我成功地将声音重叠,没有任何问题,并设置了一个计时器,但现在我希望在计时器开始计数后的10秒开始播放一个声音。 我正在尝试创建一个“如果”来检查timer textview的值并执行“开始播放”命令,但我不知道如何使其动态检查值。这是解决我问题的正确方法吗?还是我应该用另一种方法 这是我的代码: import java.io.IOException; import android.support.v7.app.Action

我正在创建一个应用程序,它必须在固定时间播放背景音乐中的声音。到目前为止,我成功地将声音重叠,没有任何问题,并设置了一个计时器,但现在我希望在计时器开始计数后的10秒开始播放一个声音。 我正在尝试创建一个“如果”来检查timer textview的值并执行“开始播放”命令,但我不知道如何使其动态检查值。这是解决我问题的正确方法吗?还是我应该用另一种方法

这是我的代码:

import java.io.IOException;
import android.support.v7.app.ActionBarActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity implements OnPreparedListener  {


private MediaPlayer media1 = new MediaPlayer();
private MediaPlayer media2 = new MediaPlayer();
private TextView timerValue;
private long  startTime = 0L;
private Handler customHandler = new Handler(); 

long timeInMilliseconds = 0L;
long timeSwapBuff = 0L;
long updatedTime = 0L;

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     timerValue = (TextView) findViewById(R.id.timerValue);

     playaudio();
     Toast.makeText(getApplicationContext(), "Reproduciendo", Toast.LENGTH_LONG).show();
}

protected void playaudio() 
{
    try {
        media1.setDataSource("http://tauruszone.sytes.net/uno.mp3");
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    media1.prepareAsync();
    media1.setOnPreparedListener(this);

try {
    media2.setDataSource("http://tauruszone.sytes.net/dos.mp3");
} catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
media2.prepareAsync();
media2.setOnPreparedListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}


@Override
public void onPrepared(MediaPlayer mp) {
    // TODO Auto-generated method stub

    startTime = SystemClock.uptimeMillis();
    customHandler.postDelayed(updateTimerThread, 0);
    startplaying();
}


private Runnable updateTimerThread = new Runnable() {
    public void run() {
        timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
        updatedTime = timeSwapBuff + timeInMilliseconds;
        int secs = (int) (updatedTime / 1000);
        int mins = secs / 60;
        secs = secs % 60;
        timerValue.setText("" + mins + ":"
                + String.format("%02d", secs));
        customHandler.postDelayed(this, 0);
    }
};

protected void  startplaying() 
{
    media1.start();
// This is the code im struggling with:
    if(timerValue.getText().toString().equals(00:10)){
       media2.start();
       }
    }
}

谢谢。

请尝试使用,但AlarmManager是否可以在指定方法后进行计数?我的印象是,它可以在绝对时间调用事件,比如晚上9点左右。你能给我举个例子,说明它如何适用于我的问题吗?谢谢。您可以用自己的方法启动
AlarmManager
,也可以用“计时器”来完成。myTimer=新计时器();然后是myTimer.schedule(yourTaskHere,10000);10000是10毫秒。我可以用这个方法设置几个计时器吗?比如,一个在10秒,另一个在30秒,另一个在2分钟,依此类推?