在Android 8.0及以上版本中,不允许动态广播接收器接收具有隐式意图的广播。因此,使用动态广播接收器来接收AlarmManager的广播可能无法正常工作。
解决方法是使用静态广播接收器代替动态广播接收器。静态广播接收器在Manifest文件中声明,并且明确指定接收的广播类型和Intent过滤器。这样就可以确保接收AlarmManager的广播。
以下是一个演示如何使用静态广播接收器接收AlarmManager广播的示例代码:
AndroidManifest.xml:
MainActivity.java:
Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, pendingIntent);
AlarmReceiver.java:
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "AlarmManager broadcast received", Toast.LENGTH_SHORT).show(); } }