我的应用中的闹钟管理器不起作用。我做了这里所描述的一切
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);
我不知道如何让它发挥作用。请帮我修理一下。
答案 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查看代码中是否有任何警告或错误,例如可能AlarmReceiver
或NotificationActivity
未在清单中注册。
答案 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_WAKEUP
与RTC_WAKEUP
之间javadoc的差异。