我在我的应用程序中使用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));
有人请帮我解决这个奇怪的问题。任何帮助都会很明显。 谢谢
答案 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
当日期因时间的推移而发生变化时发生。)