AlarmManager.RTC_WAKEUP不适用于某些设备

时间:2014-03-07 09:26:15

标签: android alarmmanager android-alarms

我在我的应用程序中使用AlarmManager来设置特定时间的警报。我使用AlarmManager.RTC_WAKEUP来设置闹钟。当我测试它时,它正在处理像Lg optimus,Sony Xperia等设备的数量。但是在三星Galaxy S3中测试相同的应用程序时,我发现警报不起作用。我仍然无法理解为什么会发生这种情况。

我使用以下代码来设置闹钟: -

            // create the object
            AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);

            //set the alarm for particular time

            alarmManager.set(AlarmManager.RTC_WAKEUP,cal1.getTimeInMillis(), PendingIntent.getBroadcast(getActivity(),reminderId,  intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));

有人请帮我解决这个奇怪的问题。任何帮助都会很明显。 谢谢

5 个答案:

答案 0 :(得分:3)

我不确定,但听起来问题在于你设置cal1的时间和可能是不同的时区。

答案 1 :(得分:0)

我不确定您遇到的具体问题是什么,但您可以尝试将System.currentTimeMillis()替换为cal1.getTimeinMillis()+以ms为单位的时间增量。这对我来说一直很有效。

答案 2 :(得分:0)

您好我有一个示例代码,我已经在所有测量设备上进行了测试,它运行正常。 请尝试这个演示邮政编码,希望它能用于案例 -

 Calendar calendar = Calendar.getInstance();
 calendar.setTimeInMillis(System.currentTimeMillis());
 alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pendingIntent);

了解详情:http://www.androidhub4you.com/2013/12/android-alarm-manager-example-how-to.html

答案 3 :(得分:0)

我认为你的“cal1”对象有问题;
在日历对象中设置时间,实际设置月份时,不应使用月份的精确数值;
例如: - 4月= 4,你必须使用3而不是4
我在API级别19中遇到了这个问题,但是不了解其他问题 这个问题可能会给你更好的解释。Why month give wrong value

public Calendar c = Calendar.getInstance();
                c.set(Calendar.YEAR,2014);
                c.set(Calendar.MONTH, 03);//One minus from actual month numeric value
                c.set(Calendar.DATE, 24);
                c.set(Calendar.HOUR_OF_DAY,16 );                
                c.set(Calendar.MINUTE, 39);
                  c.set(Calendar.SECOND, 0);
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi);

答案 4 :(得分:0)

您的测试是否被长期的Android操作系统错误https://code.google.com/p/android/issues/detail?id=2880绊倒了?如果时钟向后设置,Intent.ACTION_DATE_CHANGED广播将无法发送,直到时钟赶上闹钟时间。 (重新启动以重置此故障状态。)因为此Intent基于AlarmManager警报,该警报在时钟更改时不会更新。

这种情况在正常使用中非常罕见。但是在测试报警代码时经常会发生这种情况。

如果您通过调整时钟来测试AlarmManager闹钟,AFAIK在任何Android设备上设置为目标日历的任何闹钟都会因调整时钟而变得混乱。无论何时调整时钟,您都可以通过重新安排闹钟来解决问题。这假设系统正确广播Intent.ACTION_TIME_CHANGED,以便您可以判断时钟何时调整。 (意图被错误命名。它不像Intent.ACTION_DATE_CHANGED当日期因时间的推移而发生变化时发生。)