2016-10-27 3 views
-2

Я хочу запустить эту услугу в определенное время суток, но она не ответит. Любые причины, почему это происходит?Alarm Manager работает в определенное время дня

String time = sharedPrefs.getString("change_time", ""); 
    String[] parts = time.split(":"); 
    int chosenHour = Integer.parseInt(parts[0]); 
    int chosenMinute = Integer.parseInt(parts[1]); 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.HOUR_OF_DAY, chosenHour); 
    cal.set(Calendar.MINUTE, chosenMinute); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 

    Intent i = new Intent(this, SmsService.class); 
    PendingIntent pIntent = PendingIntent.getService(this, 0, i, 0); 
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 86400000, pIntent); 
    return super.onStartCommand(intent, flags, startId); 

ответ

0

Где вы разместили код? Это внутри Service (как я вижу super.onStartCommand(intent, flags, startId)? Если да, то вы начали службу?

Для планирования AlarmManager, я бы рекомендовал поставить код в Application#onCreate().

+0

Service.StartService()? и где я это ставлю? –

+0

Да, это API. «Где я могу сказать?» => В зависимости от ваших потребностей, например. если вы хотите немедленно начать свою службу, поместите его в «Application # onCreate()» или вы хотите вызвать его на основе какого-либо события/действия, а затем вызвать метод, когда происходит событие/действие. Но, как я сказал ранее, вы должны поместить код в «Приложение № onCreate()», а не внутри службы. –

0

Вызывайте эту Metod от вашего MainActivity:

private void setNotifyAlarm() { 
     long _alarm; 
     Calendar now = Calendar.getInstance(); 
     Calendar wakeupcall = Calendar.getInstance(); 
     wakeupcall.setTimeInMillis(System.currentTimeMillis()); 
     wakeupcall.set(Calendar.HOUR_OF_DAY, 15); 
     wakeupcall.set(Calendar.MINUTE, 30); 

     if (wakeupcall.getTimeInMillis() <= now.getTimeInMillis()) 
      _alarm=wakeupcall.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1); 
     else 
      _alarm=wakeupcall.getTimeInMillis(); 


     al = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     notif= new Intent(this,NotifyService.class); 
     fintent = PendingIntent.getService(this,0,notif,0); 
     al.setRepeating(AlarmManager.RTC_WAKEUP,_alarm,AlarmManager.INTERVAL_DAY, fintent); 

    } 

Этот метод вызова службы Каждый день в 15:30 Теперь в вашем классе обслуживания:.

@Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     String time = sharedPrefs.getString("change_time", ""); 
    String[] parts = time.split(":"); 
    int chosenHour = Integer.parseInt(parts[0]); 
    int chosenMinute = Integer.parseInt(parts[1]); 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.HOUR_OF_DAY, chosenHour); 
    cal.set(Calendar.MINUTE, chosenMinute); 
    cal.set(Calendar.SECOND, 0); 
    cal.set(Calendar.MILLISECOND, 0); 

    Intent i = new Intent(this, SmsService.class); 
    PendingIntent pIntent = PendingIntent.getService(this, 0, i, 0); 
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 86400000, pIntent); 
     return START_STICKY; 
    } 

ADD это в вашем файле манифеста:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
<service android:name=".NotifyService" android:exported="true" android:enabled="true"/> 
Смежные вопросы