警报管理器不起作用

时间:2016-02-25 23:46:56

标签: java android alarmmanager android-alarms

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

清单

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

收件人(收件人在清单中注册)

@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);

我不知道如何让它发挥作用。请帮我修理一下。

2 个答案:

答案 0 :(得分: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未在清单中注册。

答案 1 :(得分: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之间javadoc的差异。