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