1

В приведенном ниже коде, это делает главное, что я хочу до сих пор: - Повторяется каждый час, в то же времяAlarmManager для Android

Может кто-то проверить, является ли или то, что мне нужно сделать, чтобы убедиться следующие пункты?

(1) Тревога в конечном итоге будет основана на днях месяца. Пока он гаснет, когда они разбудят свой телефон (чтобы сэкономить аккумулятор). Это не час или минута. Только день. Как это можно достичь?

(2) Если действие уничтожено или телефон перезагружен, я не уверен, что мой AlarmManager бодрствует?

(3) Наконец, этот код повторяется каждый раз при запуске приложения (таким образом, перезаписать существующие AlarmManagers, это правильный способ делать вещи, или я должен проверить, чтобы увидеть, если Alarm существует

for (int i : AlarmDays) { 

     if (String.valueOf(i) == null) { 
      continue; 
     } 

     Calendar cal = Calendar.getInstance(); 
     if (cal.get(Calendar.MINUTE) >= i) 
      cal.add(Calendar.HOUR, 1); 
     cal.set(Calendar.MINUTE, i); 

     Intent intent = new Intent(this, TimeAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, i, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
       60 * 60 * 1000, pendingIntent); 
    } 

// TimeAlarm.class 
public void onReceive(Context context, Intent intent) { 


    String DebtName = null; 

    nm = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    CharSequence from = "Payment Due"; 
    CharSequence message = "Open App and Update your Balance"; 
    Intent notificationIntent = new Intent(context, ManageDebts.class); 
    notificationIntent.getExtras(); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
      notificationIntent, 0); 
    Notification notif = new Notification(R.drawable.icon, "Pay " 
      + DebtName + " today!", System.currentTimeMillis()); 
    notif.setLatestEventInfo(context, from, message, contentIntent); 
    notif.defaults = Notification.DEFAULT_SOUND 
      | Notification.DEFAULT_LIGHTS; 
    nm.notify(1, notif); 
} 
?

И в моем приложении тег в моем манифесте:

EDIT:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<Application>   
    <receiver 
     android:name=".TimeAlarm" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 
</Application> 

ответ

1

AlarmManager воли не чел ist через телефон, который перезагружается. Тем не менее, он будет сохраняются в приложении, которое убивает Android-планировщик. Из-за этого, вы в основном нужно:

  • магазин ваш график где-то и придумать алгоритм планирования для принятия решения в следующий раз, когда вы хотите, чтобы AlarmManager огонь.
  • Каждый раз, когда вы получаете сигнал тревоги, назначьте новый.
  • Запустите AlarmManager на ботинке, поймав радиопередачу BOOT_COMPLETED.
+0

Спасибо за ответ. Я попытался реализовать вашу третью пулю в манифесте и обновил код выше в сторону дна. Теперь я получаю уведомление каждый раз, когда устройство перезагружается, а не ждет точную минуту часа. Любые мысли по этому поводу? – KickingLettuce

+0

Уверен, вам нужно сделать расчет, чтобы определить, когда планировать будильник! –

+0

Выполняя больше исследований, кажется, мне нужно сделать отдельный «загрузочный приемник», чтобы выдать эти вычисления, когда устройство перезагрузится. Это верно? – KickingLettuce