Android 如何在后台从服务设置闹钟?

Android 如何在后台从服务设置闹钟?,android,firebase-cloud-messaging,android-service,Android,Firebase Cloud Messaging,Android Service,我希望能够在运行服务时从后台设置可变警报。我正在使用以下代码: ... @Override public void onMessageReceived(RemoteMessage remoteMessage) { ... Intent i = new Intent(AlarmClock.ACTION_SET_ALARM); i.putExtra(AlarmClock.EXTRA_SKIP_UI, true); i.p

我希望能够在运行服务时从后台设置可变警报。我正在使用以下代码:

...
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        ...
        Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
        i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
        i.putExtra(AlarmClock.EXTRA_HOUR, 9);
        i.putExtra(AlarmClock.EXTRA_MINUTES, 9);
        i.putExtra(AlarmClock.EXTRA_MESSAGE, "Good Morning");
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
    }
...

我知道这是一项活动。但是有没有其他方法或技巧可以完成我在这里需要做的事情?

查看计划重复报警,您可以使用
AlarmManager
PendingEvent
,如下所示

启动服务时,您始终可以设置警报,并使用当前时间将警报设置为立即触发

当警报响起时,它会向广播接收器发送一个意图(在下面的例子中是
AlarmReceiver
,只需自己制作)。然后,您可以从
AlarmReceiver
执行任何您想要的操作

它可能值得一读,因为我发现它非常有用。它最多只需要15分钟,非常清晰,应该满足您的要求

private var alarmMgr: AlarmManager? = null
private lateinit var alarmIntent: PendingIntent
...
alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmIntent = Intent(context, AlarmReceiver::class.java).let { intent ->
    PendingIntent.getBroadcast(context, 0, intent, 0)
}

// Set the alarm to start at 8:30 a.m.
val calendar: Calendar = Calendar.getInstance().apply {
    timeInMillis = System.currentTimeMillis()
    set(Calendar.HOUR_OF_DAY, 8)
    set(Calendar.MINUTE, 30)
}

// setRepeating() lets you specify a precise custom interval--in this case,
// 20 minutes.
alarmMgr?.setRepeating(
        AlarmManager.RTC_WAKEUP,
        calendar.timeInMillis,
        1000 * 60 * 20,
        alarmIntent
)

查看计划重复报警,您可以使用
AlarmManager
PendingEvent
,如下所示

启动服务时,您始终可以设置警报,并使用当前时间将警报设置为立即触发

当警报响起时,它会向广播接收器发送一个意图(在下面的例子中是
AlarmReceiver
,只需自己制作)。然后,您可以从
AlarmReceiver
执行任何您想要的操作

它可能值得一读,因为我发现它非常有用。它最多只需要15分钟,非常清晰,应该满足您的要求

private var alarmMgr: AlarmManager? = null
private lateinit var alarmIntent: PendingIntent
...
alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
alarmIntent = Intent(context, AlarmReceiver::class.java).let { intent ->
    PendingIntent.getBroadcast(context, 0, intent, 0)
}

// Set the alarm to start at 8:30 a.m.
val calendar: Calendar = Calendar.getInstance().apply {
    timeInMillis = System.currentTimeMillis()
    set(Calendar.HOUR_OF_DAY, 8)
    set(Calendar.MINUTE, 30)
}

// setRepeating() lets you specify a precise custom interval--in this case,
// 20 minutes.
alarmMgr?.setRepeating(
        AlarmManager.RTC_WAKEUP,
        calendar.timeInMillis,
        1000 * 60 * 20,
        alarmIntent
)

谢谢你的快速回复!卡勒姆,你能帮个忙吗?我正在尝试取消自己设定的意图。谢谢您的快速回复!卡勒姆,你能帮个忙吗?我试图取消自己设定的意图。