我目前正在使用Android Studio开发一个Android应用。我的要求之一是在准确的时间触发BroadcastReceiver。直到应用程序在后台运行之前,它都可以正常工作。一旦该应用程序从最近的应用程序列表中被杀死,它将无法正常工作。我不知道问题出在警报管理器中还是在BroadcastReceiver中。
<receiver android:name=".BackgroundServer"
android:permission="TODO"
tools:ignore="ExportedReceiver">
<intent-filter>
<action android:name="birthday.wallpaper.WALLPAPER_CHANGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
并且在MainActivity中...
Intent intent = new Intent(this,BackgroundServer.class);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(getApplicationContext(), 0,intent,0);
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
assert manager != null;
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,
pendingIntent
);
注意:警报管理器是在主要活动的onStart方法中设置的。
您使用了动态声明的接收器。这意味着它是在您的活动中创建并注册的。声明这种类型的接收器并在onResume()中注册。当您终止活动时,必须在onStop()中注销它。如果不注销,将会收到一个称为LeakIntentMemory的错误,但是活动通过以下方式注销它:本身和应用不会崩溃。但是当您查看logcat时,您会看到LeakIntentMemory错误。正如您所告诉的,这种类型的接收器可以正常工作。当您关闭应用程序时,您什么也收不到。如果您想在应用关闭时收到任何消息,则必须在android清单中声明接收者。有关更多示例,请检查我的GitHub https://github.com/okanSerdaroglu/BroadcastReceivers