Android의 알람 관리자에 문제가 있습니다. 그래서 내가하려고하는 일은 매일 12.01AM 정도의 DB 삽입을 실행하기 위해 반복되는 알람을 설정하는 것입니다.Android 알람 관리자 설정을 특정 타이밍에서 반복
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 1);
notificationCount = notificationCount + 1;
AlarmManager mgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent(context,
ReminderAlarm.class);
notificationIntent.putExtra("NotifyCount", notificationCount);
PendingIntent pi = PendingIntent.getBroadcast(context,
notificationCount, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
그래서 기본적으로 나는이 코드를 생각해 냈습니다. 그러나 알람 관리자는 설정 한 후 다시 실행합니다.
2011 년 1 월 10 일 5.48PM에 앱을 실행한다고 가정 해 보겠습니다. 나는 이것을 12.01M 주위에서만 설정 한 후 매일 onReceive 할 때 DB 삽입을 실행하기를 원했습니다. 하지만 어쨌든 알람 관리자는 2014 년 1 월 10 일 5.49PM에 실행합니다. 설정한지 1 분 후 작동이 멈췄습니다.
내가 잘못한 부분이 궁금합니다.
미리 감사드립니다.
이 클래스의 편집
반복 클래스 , 그것은 알람 매니저의 일상을 트리거하고 DB 삽입에 대한 알림 경보 클래스에 따라 변수를 전달합니다.
public void onReceive(Context context, Intent i) {
if (i.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Recurring.scheduleAlarms(context);
}
}
ReminderAlarm 클래스
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recurring);
context = this;
buildListView();
if(!alarmInitialized(this)) {
scheduleAlarms(this);
}
}
// And the few methods you suggested to schedule the alarm
public static void scheduleAlarms(Context context) {
Calendar calendar = Calendar.getInstance();
if (hasRunnedToday(context)) { // if the alarm has run this day
calendar.add(Calendar.DATE, 1); // schedule it to run again starting
// tomorrow
}
long firstRunTime = calendar.getTimeInMillis();
AlarmManager mgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent(context, ReminderAlarm.class);
PendingIntent pi = PendingIntent.getActivity(context, 0,
notificationIntent, 0);
mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstRunTime,
AlarmManager.INTERVAL_DAY, pi);
ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
BootReceiver 클래스는 기본적으로이 클래스 단지 반복 클래스로부터 전달 된 변수를 잡아서 DB 삽입을 수행한다. 내가 그것을 검색하여 운이 아니지만 검색하는 경우 테스트 Toast.makeText 일부를 삽입 않았다.
이 코드는 BootReceiver 클래스를 호출하도록 알람을 예약하도록 제안 된 부분에 추가되었습니다. 그런 다음 BootReceiver 클래스에서, 나는 반복 클래스와 알림 알람 클래스에 다시 호출합니다 :
ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
** "... 알람 매니저가 내가 설정 한 후 1 분 2014년 1월 10일 오후 5시 49분에서 실행하고 작동을 멈췄습니다. "** Calendar.HOUR_OF_DAY'를 0으로 설정하여 시간을 뒤로 설정하고 있습니다. 그러면 즉시 경보 트리거가되고 그 다음날 00:01까지 다시 트리거되지 않습니다. – Squonk
@Squonk 그래서이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 내 연구 결과, 특정 시간에 경보를 울릴 수 있다고 생각했기 때문입니다. –
@Squonk 그래서이 코드를 어디에 넣어야합니까? 전체 부품을 답변으로 게시 하시겠습니까? –