我打开这个主题是因为我在应用程序通知方面遇到问题;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分钟是绝对最低的,许多制造商有更严格的限制。
如果需要以该频率运行代码,则应该使用Handler
和postDelayed()
。
此外,setRepeating()
不能可靠地按时交付。AlarmManager
还有其他方法可以用来获得更准确的计时。但正如我所说,频率不超过2分钟。
此外,您还问为什么AlarmManager
不调用您的BroadcastReceiver
,但您发布的代码片段使用AlarmManager
每分钟启动一个Service
(WOnTrackerFirebaseMessagingService
(,而不是调用您的BroadcastReceiver
。你困惑了吗?