如何在android Oreo或更高版本上设置警报?

如何在android Oreo或更高版本上设置警报?,android,alarmmanager,android-8.0-oreo,background-service,Android,Alarmmanager,Android 8.0 Oreo,Background Service,我已经用后台服务实现了AlaramManager,它在Oreo以下的设备上运行良好。但是,由于谷歌停止了对Oreo和更高版本的后台服务的开发,因此无法在android Oreo和更高版本上运行 是否有任何源代码或任何种类的资源可以帮助我在android Oreo或以上设备上设置报警 在搜索了一段时间后,我找到了关于JobsIntService,但找不到足够的信息。我不知道这是不是一条路要走。基本上,我想在特定的日期和时间显示通知 提前谢谢。请尝试下面的方法,它会对您有效 /** * Metho

我已经用
后台服务实现了
AlaramManager
,它在Oreo以下的设备上运行良好。但是,由于谷歌停止了对Oreo和更高版本的
后台服务的开发,因此无法在android Oreo和更高版本上运行

是否有任何源代码或任何种类的资源可以帮助我在
android Oreo
或以上设备上设置
报警

在搜索了一段时间后,我找到了关于
JobsIntService
,但找不到足够的信息。我不知道这是不是一条路要走。基本上,我想在特定的日期和时间显示通知


提前谢谢。

请尝试下面的方法,它会对您有效

/**
 * Method for start Alarm on defined minute
 *  @param minutes Minute when you want to start after current time
 * @param context
 */
public static void startAlarm(Context context, int minutes) {
    Logger.print("AlarmReceiver startAlarm  called");
    Intent alarmIntent = new Intent(context, WakefulBroadcastReceiverService.class);
    alarmIntent.setAction("testAPP");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    manager.cancel(pendingIntent);
    long alarmPeriodicTime = System.currentTimeMillis() + Utils.getTimeInMilliSec(Constant.TimeType.MINUTE, minutes);
    if (Build.VERSION.SDK_INT >= 23) {
        manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    } else if (Build.VERSION.SDK_INT >= 19) {
        manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    } else {
        manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    }
}

请尝试下面的方法,它将为您工作

/**
 * Method for start Alarm on defined minute
 *  @param minutes Minute when you want to start after current time
 * @param context
 */
public static void startAlarm(Context context, int minutes) {
    Logger.print("AlarmReceiver startAlarm  called");
    Intent alarmIntent = new Intent(context, WakefulBroadcastReceiverService.class);
    alarmIntent.setAction("testAPP");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    manager.cancel(pendingIntent);
    long alarmPeriodicTime = System.currentTimeMillis() + Utils.getTimeInMilliSec(Constant.TimeType.MINUTE, minutes);
    if (Build.VERSION.SDK_INT >= 23) {
        manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    } else if (Build.VERSION.SDK_INT >= 19) {
        manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    } else {
        manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
    }
}

当设备处于打瞌睡模式时,它是否工作?如果它能工作,那么如果你分享WakefulBroadcastReceiverService的一个片段,那将是一个很大的帮助,因为,我使用了一个只显示通知的简单广播接收器。是的,它对我在瞌睡模式下工作,最好你先试试。谢谢。如果它对我也有效,我将尝试并分享。我没有从链接中找到你的问题。如果我们想在精确时间和瞌睡模式下重复警报,我们应该怎么做?当设备处于瞌睡模式时,它是否有效?如果它能工作,那么如果你分享WakefulBroadcastReceiverService的一个片段,那将是一个很大的帮助,因为,我使用了一个只显示通知的简单广播接收器。是的,它对我在瞌睡模式下工作,最好你先试试。谢谢。如果它对我也有效,我会尝试一下并与大家分享。我没有从链接中找到你的问题。如果我们想在准确时间和瞌睡模式下重复警报,我们该怎么办?作业计划程序是一个很好的解决方案,但当你需要在准确时间触发警报时就不行了。因为Job Scheduler会延迟服务以节省电池电量,并且在dose模式下无法正常工作。Job Scheduler是一个很好的解决方案,但当您需要在准确的时间触发警报时,它就不起作用了。因为作业调度器延迟服务以节省电池电量,并且在剂量模式下无法正常工作。