确认使用的PendingIntent是否具有唯一标识符。 PendingIntent需要指定不同的requestCode来进行唯一标识,如下所示。
Intent intent = new Intent(context, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, uniqReqID, intent, 0);
确认调度时间是否正确。 AlarmManager所使用的时间是系统时间,需要在调用AlarmManager之前检查时间是否正确。
确认是否已经赋予应用程序适当的权限。 在AndroidManifest.xml中添加以下权限。
对于Android 6.0以上版本还需要在运行时请求权限。 在调用AlarmManager之前添加以下代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { requestPermissions(new String[]{Manifest.permission.SET_ALARM}, requestCode); }
禁用节电模式。 Android中的节电模式可能会影响AlarmManager的工作,需要在调用AlarmManager之前禁用节电模式。
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (! powerManager.isIgnoringBatteryOptimizations(context.getPackageName())) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + context.getPackageName())); startActivity(intent); } }