Как обойти настройку уникального идентификатора для AlarmManager? - PullRequest
3 голосов
/ 07 октября 2011

Я использую этот код для запуска тревоги.

Будильник установлен в действии, которое может запустить пользователь.

//Setting alarm to fire off NEW_GAME intent every 24 hours.
            String alarm = Context.ALARM_SERVICE;
            Calendar calendar = Calendar.getInstance();

            calendar.set(Calendar.HOUR_OF_DAY, 8);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.MILLISECOND, 0);

             Log.i("Test", "Current time: " + System.currentTimeMillis() );
                Log.i("Test", "Calendar time: " + calendar.getTimeInMillis() );

                int currentDate = calendar.get(Calendar.DATE);
                calendar.set(Calendar.DATE, currentDate+1);

                Log.i("Test", "Calendar time with a day added: " + calendar.getTimeInMillis() );


            AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm);
                Intent intent = new Intent("NEW_ITEM");
                PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);

                am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender);

Мне сказали, что мне нужно предоставить уникальный идентификатор, чтобы сигнал тревоги не перезаписывал друг друга, где находится getBroadcast ().

Проблема в том, как мне сделать это, когда пользователь может открыть действие так много раз, как он хочет?

Также, если я предоставляю уникальный идентификатор каждый раз, это означает, что он может установить 5 одинаковых ТРЕВОГ из-за уникальных идентификаторов.

Как или как лучше всего обойти это?

1 Ответ

4 голосов
/ 07 октября 2011

вы всегда можете просто использовать метку времени Unix вашего целевого времени в качестве уникального идентификатора.таким образом, тревоги за точное время БУДУТ перекрывать друг друга, в то время как все остальные тревоги будут оставаться отдельными

[EDIT:] Вот пример кода:

AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm);
            Intent intent = new Intent(String.valueOf(calendar.getTimeInMillis()));
            PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
            am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender);
...