当前位置: 首页 > 知识库问答 >
问题:

使用警报管理器重复后台服务

岑俊弼
2023-03-14

目前,我正在开发一个新的android项目,它使用后台服务。因为android版本

class AlarmHandler {
    private Context context;
    AlarmHandler(Context context){
        this.context=context;
    }
    void setAlarmManager(){
        Intent intent=new Intent(context,NotificationService.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(context,2,intent,0);
        AlarmManager alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if(alarmManager!=null){
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,5000,60000,pendingIntent);
        }
    }
    void cancelAlarmManager(){
        Intent intent=new Intent(context,NotificationService.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(context,2,intent,0);
        AlarmManager alarmManager= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if(alarmManager!=null){
            alarmManager.cancel(pendingIntent);
        }
    }
}

我的通知服务如下

public class NotificationService extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String t1=timeFromsharedPreferences("t1");
        String t2=timeFromsharedPreferences("t2");
        String systemTime=getCurrentTime();
        if(systemTime.equals(t1)){
            notify();
        }else if(systemTime.equals(t2)){
            notify();
        }
    }
}

我使用以下代码启动AlarmHandler

AlarmHandler alarmHandler=new AlarmHandler(this);
alarmHandler.cancelAlarmManager();
alarmHandler.setAlarmManager();

我还注册了以下广播接收器

<receiver android:name=".NotificationService" android:enabled="true" />

我的问题是有时它会跳过我的通知。时间安排为晚上10:00和早上7:00。收到晚上10点的通知(请注意,我在晚上10:00使用电话或在晚上10:00前几分钟使用)。但并非所有时间都收到上午7:00的通知。还要注意的是,我每天都需要在同一时间收到通知。请帮帮我。

共有1个答案

柳业
2023-03-14

您不能有重复的精确警报。如果您需要它以精确的间隔重复,您需要在第一个间隔设置一个精确的警报,然后在警报触发时重新启动警报,以便在下一个间隔内启动警报,并继续重复该过程。

编辑:

你需要做这样的事

1.- compute delta in millis to next interval
2.- set exact alarm to fire in delta millis
3.- when the alarm fires, handle the event and then go to step 1
 类似资料:
  • 问题内容: 我想创建带有通知消息的广播AlarmManager(重复)。我从Pickers中传递日历对象。如果我不重启设备,它将正常工作。但是,当我重新启动设备时,您知道我的calander对象将为null。重新启动后如何管理重复警报以及如何保留日历时间表?感谢您的想法。 问题答案: 您需要使用并将其设置为响应消息。例如 在清单中注册您的 在代码中处理消息 MyBootReceiver.java

  • 下面是我的回复: 我走对路了吗?AndroidAlarmManager能做我想做的事情吗?我也不确定为什么隔离方法不能单独工作,我得到的唯一解释是我需要使用AndroidAlarmManager。现在,这些事件并不像我告诉他们的那样以100毫秒的速率发射,而是间隔1到几分钟发射。

  • 问题内容: 嗨,我正在开发警报应用程序,因为我需要在用户选择的不同日期的同一时间重复调用警报。 我meen如果我设置报警时间8PM和重复选项sunday,tuesday闹钟会在每个被调用sunday,tuesday。 任何帮助,将不胜感激。 问题答案: 为此使用广播接收器和Sqlite数据库。

  • 嗨,我目前正在使用警报管理器。我写了下面给出的代码。根据代码,警报管理器应该在10秒后触发,但在我的代码中,警报管理器会立即触发。请帮助。 还有我的警报接收课 我已经在清单中添加了所需的权限。

  • 我在Google Play控制台上收到了一份来自Android Vval的关于过度警报管理器唤醒的性能报告: https://developer.android.com/topic/performance/vitals/wakeup.html 我使用Google Play Services的位置API在后台请求位置更新。报告显示,过度唤醒是由com引起的。谷歌。Android地方ALARM_WAK