0

У меня есть BroadcastReceiver, начиная службу. В этой службе у меня есть AlarmManager, я хочу запускать другую услугу в определенное время суток, каждый день.Android: Запуск службы в выбранное время

BroadcastReceiver запускается, когда я открываю приложение, но AlarmManager начинает свою службу только в том случае, если я запускаю BroadCastReceiver в установленное время.

Как заставить его постоянно сравнивать текущее время с заданным временем, чтобы оно автоматически запускалось, когда время было правильным?

В MainActivity.java

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Intent intent = new Intent(); 
    intent.setAction("com.example.BroadcastPro.MyBroadcastReceiver"); 
    sendBroadcast(intent); 
} 

В myBroadcastReceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Intent i=new Intent(context,SetPeriodicService.class);  
     context.startService(i); 
    } 
} 

В SetPeriodicService.java

public int onStartCommand(Intent intent, int flags, int startId)  
{ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY, 12); 
    calendar.set(Calendar.MINUTE, 30); 

    Intent i=new Intent(this,MyService.class); 
    PendingIntent alarmIntent = PendingIntent.getService(this, 0, i, 0); 
    AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmManager.INTERVAL_DAY, alarmIntent); 

    return super.onStartCommand(intent, flags, startId);  
} 
+0

Ваш вопрос еще не совсем понятен: «MyService» не запускается по расписанию, если запущен «SetPeriodicService»? Не можете ли вы просто запустить новую услугу в нужное время, отправив задержанную версию из старой службы? – Price

+0

@ user87049 Нет, MyService не запускается, если я не запустил приложение точно в установленное время. – stremilie

ответ

0

В SetPeriodicService.java на alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmManager.INTERVAL_DAY, alarmIntent); Вам нужно изменить, чтобы alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmMgr.INTERVAL_DAY, alarmIntent);

Смежные вопросы