2016-02-25 70 views
0

我的应用程序闹钟管理器不起作用。我做这里所描述的一切 https://developer.android.com/training/scheduling/alarms.html 但报警不起作用。
这是我的代码:闹钟管理器不起作用

清单

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

Reciever(Reciever在清单注册)

@Override 
public void onReceive(Context context, Intent intent) { 

    Intent alarmIntent = new Intent(Constants.ALARM_INTENT); 
    alarmIntent.setClass(context, NotificationActivity.class); 
    alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(alarmIntent); 
} 

活动

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(context, AlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, 1); 
calendar.set(Calendar.MINUTE, 30); 

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

我不知道如何使它工作。请帮我解决它。

回答

0

首先,删除SET_ALARM权限,因为它在这里不相关。

其次,您需要确保您的Calendar对象是未来。大多数情况下,您将会过去,因为您使用的是calendar.set(Calendar.HOUR_OF_DAY, 1)set(Calendar.MINUTE, 30)。如果您在01:30之后执行此代码,它将会在过去。在这种情况下,你需要有一天add(),以便明天在01:30。

第三,使用adb shell dumpsys alarm来查看是否安排了您的闹钟,一旦您进行上述修复。

第四,使用LogCat查看是否有来自您的代码的任何警告或错误,例如AlarmReceiverNotificationActivity未在清单中注册。

+0

@ Jackky777:'adb'是Android SDK中的一个程序,设计用于在命令行运行。 – CommonsWare

0

你问基于系统的经过实时时钟这里的报警:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

但是你基于通常的日历时钟传递给它的时间。如果你想要一个闹钟使用基于日历的时钟发生,说这个:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
     calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 

ELAPSED_REALTIME_WAKEUPRTC_WAKEUP之间的differnce在javadoc

+0

这是正确的答案。 – someUser