java - AlarmManager 没有调用 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);
}
}
安卓清单:
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
and 。postDelayed()
此外,setRepeating()
不能可靠地按时交付。您可以使用其他方法AlarmManager
来获得更准确的计时。但正如我所说,频率不会低于 2 分钟。
此外,您问为什么AlarmManager
没有调用您的BroadcastReceiver
,但是您发布的代码片段每分钟 都使用( )AlarmManager
开始,而不是调用您的. 你困惑吗?Service
WOnTrackerFirebaseMessagingService
BroadcastReceiver
推荐阅读
- android - 更改适配器中未指定数量的对象的适配器中外部对象的属性
- javascript - 使用或不使用 jQuery 在屏幕上获取浮动 div 位置
- android - 应用程序在 Playstore 上传时停止工作
- python - Django通过多个过滤器过滤,检查某些条件
- python - python保存只有非零元素的numpy数组
- sql - 没有硬编码的情况下的重复模式 (Netezza SQL)
- c# - SSH.net Cisco 路由器初始连接失败
- mongodb - 如何从外部访问托管在 kubernetes 集群上的 mongodb 副本集?
- php - 带有 simplexml 的 SOAP
- applescript - AppleScript 如何根据菜单名称访问特定的上下文菜单?