3

このコードを使用してアラームを起動しています。

アラームは、ユーザーが起動できるアクティビティで設定されます。

//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() がある場所でアラームが互いに上書きしないように、一意の ID を指定する必要があると言われました。

問題は、ユーザーがアクティビティを何度でも開くことができる場合、どうすればよいですか?

また、毎回一意の ID を指定すると、一意の ID のために同じアラームが 5 つ設定される可能性があります。

これを回避する最善の方法は何ですか?

4

1 に答える 1

5

いつでも、ターゲット時間のUNIXタイムスタンプを一意のIDとして使用できます。そうすれば、正確な時間のアラームは互いに上書きされますが、他のすべてのアラームは分離されたままになります

[編集:]ここにいくつかのサンプルコードがあります:

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);
于 2011-10-07T15:27:29.480 に答える