Android 重新启动时自动触发报警的解决方法

Android 重新启动时自动触发报警的解决方法,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我一直在尝试构建一个应用程序,每小时在服务器上检查通知文件。我已经使用alarm manager类成功地实现了这一点,但我现在面临的问题是,如果用户在重新启动后不启动应用程序,则在重新启动时不会触发报警。我想自动触发警报。在搜索了一段时间后,我决定在重启时启动一个活动,我知道这是一个糟糕的做法,但可能是我唯一的出路。我想看看是否有其他方法可以实现我想要的。我愿意不使用alarm manager类进行通知。请帮忙提些建议 这是我的NotificationBootReceiver类 package

我一直在尝试构建一个应用程序,每小时在服务器上检查通知文件。我已经使用alarm manager类成功地实现了这一点,但我现在面临的问题是,如果用户在重新启动后不启动应用程序,则在重新启动时不会触发报警。我想自动触发警报。在搜索了一段时间后,我决定在重启时启动一个活动,我知道这是一个糟糕的做法,但可能是我唯一的出路。我想看看是否有其他方法可以实现我想要的。我愿意不使用alarm manager类进行通知。请帮忙提些建议

这是我的NotificationBootReceiver类

package com.example.quickstart;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;

import java.io.IOException;

public class NotificationBootReceiver extends BroadcastReceiver {
    String txt = "";
    @Override
    public void onReceive(Context context, Intent intent) {
            Log.i("Message1234","Boot Successfull ");

            // Construct an intent that will execute the AlarmReceiver
            Intent i = new Intent(context, MyAlarmReceiver.class);
            // Create a PendingIntent to be triggered when the alarm goes off
            final PendingIntent pIntent = PendingIntent.getBroadcast(context, MyAlarmReceiver.REQUEST_CODE,
                    i, PendingIntent.FLAG_UPDATE_CURRENT);
            // Setup periodic alarm every every half hour from this point onwards
            long firstMillis = System.currentTimeMillis(); // alarm is set right away
            AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            // First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP
            // Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY
            alarm.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
                    2*60*60,pIntent);
            // alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis,
            //    AlarmManager.INTERVAL_FIFTEEN_MINUTES, pIntent);



    }
}
这是我的android清单文件接收器,用于NotificationBootReceiver

  <receiver android:name=".NotificationBootReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>

在应用程序中创建引导接收器
BootBroadcastReceiver

public class BootBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context pContext, Intent intent) {
         // Start Alarm again...
    }
}
然后在
manifest.xml

<receiver
android:name="com.xyz.BootBroadcastReceiver"
android:enabled="true" >
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
建议:

顺便说一句,我以前通过Alarm Manager实现了重复通知。当设备处于运行状态时,会出现许多问题

我建议您使用谷歌架构组件,它将与21世纪之前或21世纪之后的Android版本完美配合

更新
同时检查设置警报的正确方法

这是我所做的,但问题是,这要求用户至少启动一次应用程序,以触发警报。我希望警报自动触发,而无需用户启动应用程序。不,启动接收器不需要手动启动,可能您的警报管理器有问题。尝试在引导接收器类中设置一些日志以查找问题。同时检查建议部分。在与Alarm Manager发生冲突后,我最终选择了它。请看这篇文章,并找到答案。强大的解决方案是使用最近推出的Work Manager,您也可以使用Evernote Jobs,从现在起,它将在内部使用Work Manager。因为报警管理器不可靠。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />