java - Android:AlarmManager 有时不调用 BroadcastReceiver

标签 java android broadcastreceiver alarmmanager commonsware-cwac

在我的应用程序中,我有一个 BroadcastReceiver,它由 AlarmManager 调用。 BroadcastReceiver 调用 CommonsWare 的 WakefulIntentservice

我在手机上对此进行了测试,有时我的 BroadcastReceiver 似乎根本没有被调用。我真的很困惑它可能是什么。我的 BroadcastReceiver 和 WakefulIntentservice 已在 list 中注册。

这是我的代码: 在 AlarmActivity 中:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 2);

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), savedIntervalAutomaticMilisInt, pendingIntent);

Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show();

finish();

报警接收器:

package com.something.app;

import com.commonsware.cwac.wakeful.WakefulIntentService;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(context, AlarmService.class);
        WakefulIntentService.sendWakefulWork(context, i);
    }
}

和报警服务:

package com.something.app;

import android.app.PendingIntent;
import android.content.Intent;
import com.commonsware.cwac.wakeful.WakefulIntentService;

public class AlarmService extends WakefulIntentService {

    public AlarmService() {
        super("AlarmService");
    }

    @Override
    protected void doWakefulWork(Intent arg0) {
        //A looooooooot of stuff
    }

有人知道为什么有时不调用 BroadcastReceiver 吗?

编辑:我听说要设置一个接收 onBootCompletedBroadcastReceiver。这是必需的吗?

最佳答案

所以,这就是问题所在:如果设备重新启动,它有时会清除警报,因此您必须在接收 onBootCompleted

BroadcastReceiver 中重置它们

关于java - Android:AlarmManager 有时不调用 BroadcastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199115/

相关文章:

java - 有没有办法将 i + 1 包含在广播类函数的 for 循环中?

android - 广播接收器仅在 Activity 运行时才激活,否则停用

java - 如何在Pycharm/Eclipse中分别查看Python/Java的内部代码实现?

java - SEAM 无状态 bean 未更新

具有单个日期字段的 Javabean 但需要使用日期范围对其进行搜索

java - 使用 Hibernate 将两个或多个应用程序连接到同一个数据库

java - 在 Android 中从 XML 动态创建小部件时强制关闭

android - REACT NATIVE - 处理来自自动端服务重定向 Web URL 的深层链接

android - 在应用之间共享自定义 AccountAuthenticator

Android 将数据从 Activity 传递到 BroadcastReceiver 显示 null