0

我有一个应用程序使用 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-- 如果 Mediaplayer 尚未运行,这将扩展 BroadcastReceiver 和 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 以选择时间的活动

感谢任何帮助。

4

0 回答 0