将警报活动应用程序转换为服务

时间:2013-10-07 12:40:08

标签: android service alarmmanager

我有一个应用程序,每小时后使用AlarmManager播放一首特定的歌曲。这个问题是,我的应用程序不会在后台运行很长时间。我观察它在一个小时左右被杀死。因此,该应用程序不会整天播放该歌曲。我希望我的应用程序一直运行并触发AlarmManager播放一首歌。 任何人都可以帮助我如何将我的应用程序转换为服务,以便它可以一直运行,所有的日子?

以下是我的代码片段。

MainAcitivity.java--这是主要的活动。它的目的是显示一个用户界面,用户可以选择他们想要播放歌曲的小时数:

@Override
protected void onCreate(Bundle savedInstanceState) {
....
....
Intent intent=new Intent(this,AlarmReceiver.class);
intent.setAction("Hey ! My first alarm event !");
mainActivityGlobalInstance=this;
mp=MediaPlayer.create(this, R.raw.shanti);
final int POLLING_SECONDS=1;
final Calendar cal=Calendar.getInstance();
final PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0);
final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
final Button start=(Button)findViewById(R.id.startAlarm);
final Button stop=(Button)findViewById(R.id.stopAlarm);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), POLLING_SECONDS*1000, pi);
start.setEnabled(false);
stop.setEnabled(true);
stop.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
am.cancel(pi);
stop.setEnabled(false);
start.setEnabled(true);
}
});
start.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v){
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), POLLING_SECONDS*1000, pi);
stop.setEnabled(true);
start.setEnabled(false);
}
});
}

public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==R.id.action_settings){
setFlags();
Intent intent=new Intent(this,chooseHours.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}

在上面的主要活动中,我为MediaPlayer和AlarmManager创建了实例

AlarmReceiver.java--这扩展了BroadcastReceiver,如果Mediaplayer尚未运行,onReceive会播放一首歌:

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context ctxt, Intent intent) {
try{
if(intent != null && MainActivity.mp != null && MainActivity.mainActivityGlobalInstance != null){
if(intent.getAction().equals("Hey ! My first alarm event !")){
Calendar cal=Calendar.getInstance();
if(cal.get(Calendar.MINUTE) == 0){
if( //conditions here
){
if(!MainActivity.mp.isPlaying())
MainActivity.mp.start();
}
}
}
}
}catch(Exception e){
Toast.makeText(ctxt, "Error Occured: "+e.toString(), Toast.LENGTH_LONG).show();
}

}

}

chooseHours.java - 这是一个显示选择小时的UI的活动

感谢任何帮助。

0 个答案:

没有答案