我有一个应用程序可以进行小规模调查,只要应用程序处于打开状态,它就会每隔2分钟播放一次声音(提醒用户)。但是一旦屏幕变暗/应用程序进入后台。它再也不会播放声音了。
即使应用程序在后台,我如何让它重复声音?我尝试在onStop()
中调用计时器功能,但这不起作用
private MediaPlayer mp;
Timer timer;
TimerTask timerTask;
final Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mood);
addListenerOnNext();
mp = MediaPlayer.create(MoodActivity.this,R.raw.sound);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
nextbutton = (Button) findViewById(R.id.nextbutton);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if (radioGroup.getCheckedRadioButtonId() != -1)
{
nextbutton.setEnabled(true);
}
}
});
}
@Override
public void onStart()
{
super.onStart();
startTimer();
}
@Override
public void onStop(){
super.onStop();
}
@Override
protected void onResume(){
super.onResume();
startTimer();
}
public void startTimer(){
//set a new Timer
timer = new Timer();
//initialize the timer task
initializeTimerTask();
timer.schedule(timerTask,500,120000);
}
public void stopTimerTask(){
if(timer != null){
timer.cancel();
timer = null;
}
}
private void initializeTimerTask() {
timerTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
mp.start();
}
});
}
};
}
答案 0 :(得分:1)
答案 1 :(得分:0)
我从哪里开始?
当您的应用程序不在前台时,您有2种可接受的方法可以继续执行操作(特别是对于定期任务); (已开始)Service和AlarmManager。
启动(而不是bount)服务有自己的进程,即使你的应用程序不在前台也意味着你可以使用Thread,Handler等,它将保持活着状态。( * NOT TimerTask 无论发生什么事情,都要执行重复任务。
无论您的应用程序是否存在,AlarmManager都使用系统服务来启动PendingIntent。
至于TimerTask,网上有很多帖子说明为什么它不适合Android开发,这里只有一个example,请使用IntentService,AsyncTask,Loaders,Handlers或其他任何东西。