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