2014-03-07 154 views
6

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

我使用下面的代码来设置报警: -

  // 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

最好发布代码,您也可以在其中创建cal1。 –

+0

顺便说一句你可以定义什么“不工作”的含义?它不会开火或在错误的时间开火?我已经在S3上进行了测试,通常它和其他任何设备一样。 –

+0

@confused_at_times,它根本不会引发问题..... –

回答

3

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

+0

但我正在测试应用程序的设备都在同一时区。 –

0

我不确定你遇到的具体问题是什么,但是你可以尝试用system.currentTimeMillis()+你的时间增量以ms为单位替换cal1.getTimeinMillis()。这对我一直工作。

+0

但我确实需要cal1.getTimeinMillis(),因为它是用户定义的时间,我不想系统时间.... –

+0

对不起,部分如果我的帖子消失了。现在更新。这可能不是一个可接受的解决方案,取决于您的应用的功能。 –

+0

好吧,让我检查一下.......... –

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

+0

为什么我应该使用setRepeating()代替Alarm Manager的set()方法? –

+0

请勿使用重复。根据您的修改 - alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),10000,pendingIntent); –

+0

那么这将是我现在使用的相同的代码,有什么区别? –

0

我认为你必须在你的“CAL1”对象的问题;
当您在日历对象中设置时间时,实际设置月份时,不应使用月份的精确数值;
例如: - April = 4,您必须使用3而不是4
我在API Level 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); 
0

是您的测试得到通过长时间的Android OS错误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,当日期由于时间流逝而发生变化时发生。)

+0

但是如果我将时间设置为未来时间,那么对于某些设备问题将保持不变? –

+0

假设这是您遇到的问题,AFAIK AlarmManager问题会在所有基于日历的闹钟通过调整时钟而混乱的Android设备上发生。除了Intent.ACTION_DATE_CHANGED之外,我对于向前调整和向后调整都不确定,这是通过警报实现的。我相信您可以通过在时钟调整时重新安排闹钟或在调整时钟后安排闹钟来解决此问题。 – Jerry101

相关问题