繁体   English   中英

警报管理器不起作用

[英]Alarm Manager does not work

我的应用程序中的警报管理器不起作用。 我所做的一切都像这里描述的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);

我不知道如何使它工作。 请帮我修复它。

首先,删除SET_ALARM权限,因为这里与权限无关。

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

第三,完成上述修复后,请使用adb shell dumpsys alarm来查看是否已安排警报。

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

您在此处根据系统的实时时钟请求警报:

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_WAKEUPjavadoc中的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM