2013-03-08 1 views
0

Мое приложение использует код ниже, чтобы установить Alaram для обслуживания на ежедневной основе.android alarmmanager reset

AlarmManager alarmManager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(ctx, SchedulerEventReceiver.class); // explicit// intent 

     Calendar now = Calendar.getInstance(); 
     now.add(Calendar.SECOND, 20); 
     PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, new Random().nextInt(), i,PendingIntent.FLAG_CANCEL_CURRENT); 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, now.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentExecuted); 

adb shell dumpsys alarm показывает мне правильные данные. как это планируется запустить ежедневно. Однако, когда я устанавливаю .apk на свой телефон, он выполняется несколько раз. он не ждет дня для выполнения.

Я не знаю, как сбросить будильник, установленный в моем телефоне. я удалил приложение и недавно установленное приложение, но оно не сработало. может кто-нибудь сказать мне, что не так?

+0

вам нужно, чтобы вызвать тревогу, когда установленное приложение и телефонный рестарт – DjHacktorReborn

ответ

0

Прямо сейчас, вы говорите это, чтобы идти через 20 секунд в минуту

now.add(Calendar.SECOND, 20); 

Вы должны добавить час дня и возможную минуту

now.add(Calendar.HOUR, 12) //set your hour here. noon right now 

или

now.add(Calendar.HOUR_OF_DAY, 12) 

Calendar

+0

Но я хочу сказать, чтобы пробуждения в AlarmManager.INTERVAL_DAY. это будет достаточно или мне нужно что-то еще? – Chintan

+0

Я не видел этого 'param', извините. Он должен, но я буду проверять его перед удалением. Я думаю, что это может не знать, когда эти 20 секунд должны быть так, я бы постарался добавить час и посмотреть, работает ли он – codeMagic

+0

. Я сделаю это, но мой вопрос в том, почему он ведет себя по-другому в эмуляторе. В соответствии с логикой в ​​моем приложении, после запуска тревоги, я отправляю уведомление. Я не вижу уведомления в эмуляторе. Однако я вижу, что уведомление часто появляется в моем телефоне. – Chintan

1

Я использовал это, и это работает отлично для меня. Я использовал этот будильник для запуска через 18 дней. а затем снова через 18 дней и так далее:

long time = 1555200000L; //18 days = 18*24*60*60*1000 = 1555200000L 
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent i = new Intent(context, MyReceiver.class); 
PendingIntent pi = PendingIntent.getBroadcast(context, tag, i, PendingIntent.FLAG_CANCEL_CURRENT); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi); 
+0

с этим кодом тревоги никогда не просыпается, чтобы выполнить task.private static final int EXEC_INTERVAL = 24 * 60 * 60 * 1000; AlarmManager alarmManager = (AlarmManager) ctx.getSystemService (Context.ALARM_SERVICE); Intent i = новый Intent (ctx, SchedulerEventReceiver.class); \t \t PendingIntent intentExecuted = PendingIntent.getBroadcast (ctx, new Random(). NextInt(), i, PendingIntent.FLAG_CANCEL_CURRENT); \t \t alarmManager.setRepeating (AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + EXEC_INTERVAL, AlarmManager.INTERVAL_DAY, intentExecuted); – Chintan

+0

100+ Сохранить мой день Dude спасибо – chhameed