Java AlarmManager在一段时间后被取消

Java AlarmManager在一段时间后被取消,java,android,broadcastreceiver,alarmmanager,android-pendingintent,Java,Android,Broadcastreceiver,Alarmmanager,Android Pendingintent,我正在编写我的第一个应用程序,我试图在每天的特定时间发出通知,报告一些信息。 对于starter,我创建了以下类,用于在重新启动后重新启动警报,并从主应用程序启动警报(这只需要一段代码即可重用) 之后,我用以下行更新了清单: <receiver android:name="com.mycompany.myapp.services.SetAlarmReceiver" android:enabled="true" android:expo

我正在编写我的第一个应用程序,我试图在每天的特定时间发出通知,报告一些信息。 对于starter,我创建了以下类,用于在重新启动后重新启动警报,并从主应用程序启动警报(这只需要一段代码即可重用)

之后,我用以下行更新了清单:

    <receiver
        android:name="com.mycompany.myapp.services.SetAlarmReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.mycompany.myapp.services.AlarmReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="MyReminder" />
        </intent-filter>
    </receiver>
我使用相同的方法检查主活动的警报是否开启:

private void checkServicesRunning() {
    SetAlarmReceiver setAlarmReceiver = new SetAlarmReceiver();
    setAlarmReceiver.checkServiceRunning(getApplicationContext());
}
在我看来一切都是正确的,我已经尝试了我找到的任何解决方案,在StackOverflow上阅读了大量类似我的问题,但我仍然不明白我做错了什么。 启动完成后,警报会在系统触发后立即正确触发,并且在我刚刚启用警报时,警报会正确触发(仅当通知时间在过去-即晚上10点且警报必须在上午9点触发时)。 当checkServiceRunning方法运行时,它告诉我报警已启用(在Logcat中返回true),但当我关闭应用程序并在一段时间后重新运行它时,报警看起来好像已被取消,并且正在由应用程序重新创建

有什么提示吗

谢谢

编辑:我尝试了命令“adb shell dumpsys alarm”,它实际上显示我的警报运行正常,因此,在这一点上,我认为问题在于其他方面,但我无法理解

public class AlarmReceiver extends BroadcastReceiver {

    private Context ctx;

    @Override
    public void onReceive(Context context, Intent intent) {
        this.ctx = context;
        remindStuff();
    }

    private void remindStuff() {
        ....
        some code
        ....

        // I check if the alarm is still on (probably awful, since it just fired)
        SetAlarmReceiver setAlarmReceiver = new SetAlarmReceiver();
        setAlarmReceiver.checkServiceRunning(ctx);
    }
}
private void checkServicesRunning() {
    SetAlarmReceiver setAlarmReceiver = new SetAlarmReceiver();
    setAlarmReceiver.checkServiceRunning(getApplicationContext());
}