AlarmManager is not calling onReceive



我打开这个主题是因为我在应用程序通知方面遇到问题;FirebaseMessagingService:手机睡眠时无通知我在项目中使用AlarmManager在1分钟内运行它,但当我想打印日志时,我意识到它工作不正常。广播没有任何响应。原因是什么?

问候

public class WOnTrackerReceiver extends BroadcastReceiver {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceive(Context ctxt, Intent i) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
Intent intent = new Intent(ctxt, WOnTrackerFirebaseMessagingService.class);
PendingIntent pintent = PendingIntent.getService(ctxt, 0, intent, 0);
AlarmManager alarm = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);
//for 1 mint 1*60*1000
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
1*60*1000, pintent);
}
}

Android清单:

Permission: 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="com.myproject.receivers.WOnTrackerReceiver">
android:directBootAware="true"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
</intent-filter>
</receiver>

不能使用AlarmManager以该速率获取重复警报。一般来说,2分钟是绝对最低的,许多制造商有更严格的限制。

如果需要以该频率运行代码,则应该使用HandlerpostDelayed()

此外,setRepeating()不能可靠地按时交付。AlarmManager还有其他方法可以用来获得更准确的计时。但正如我所说,频率不超过2分钟。

此外,您还问为什么AlarmManager不调用您的BroadcastReceiver,但您发布的代码片段使用AlarmManager每分钟启动一个Service(WOnTrackerFirebaseMessagingService(,而不是调用您的BroadcastReceiver。你困惑了吗?

最新更新