Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将报警活动应用程序转换为服务_Android_Service_Alarmmanager - Fatal编程技术网

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

Android 将报警活动应用程序转换为服务,android,service,alarmmanager,Android,Service,Alarmmanager,我有一个应用程序,它使用AlarmManager每小时播放一首特定的歌曲。问题是,我的应用程序不会在后台运行很长时间。我观察到它在大约一个小时后被杀死。因此,该应用程序不会整天播放这首歌。我希望我的应用程序一直运行,并触发AlarmManager播放歌曲。 有人能帮助我如何将我的应用程序转换为服务,使其能够一直运行吗 下面是我的代码片段 MainAcitivity.java--这是主要活动。其目的是显示一个用户界面,用户可以在其中选择播放歌曲的时间: @Override protected vo

我有一个应用程序,它使用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的活动


感谢您的帮助。

您可以使用Intent在广播类中再次调用AlarmReceiver广播。就像递归方法一样,没有兄弟。你可以看到我有来自mainactivity的媒体播放器参考。如果mainactivity在一段时间后被终止,那么workFriends、任何建议/评论都将无效???@ravitiwari Hi…创建一个音乐服务类。在那里创建媒体播放器实例。在OnStartCommand方法中,启动播放器实例。