如何在后台服务中设置AlarmClock闹钟?
How to set AlarmClock alarm from service in the background?
我希望能够在我的服务 运行 时从后台设置可变警报。我正在使用以下代码:
...
@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);
}
...
我知道 activity cannot be started from the background。但是有没有其他方法或技巧可以完成我在这里需要做的事情?
查看计划重复警报 documentation,您可以将 AlarmManager
与 PendingIntent
一起使用,如下所示。
当您启动该服务时,您可以随时设置闹钟并将闹钟设置为使用当前时间立即触发。
当闹钟响起时,它会向广播接收器发送一个意图(在下面的例子中是 AlarmReceiver
- 只需自己制作)。然后你可以从 AlarmReceiver
.
做任何你想做的事
整个 documentation 可能值 运行,因为我发现它非常有用。最多只需要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
)
我希望能够在我的服务 运行 时从后台设置可变警报。我正在使用以下代码:
...
@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);
}
...
我知道 activity cannot be started from the background。但是有没有其他方法或技巧可以完成我在这里需要做的事情?
查看计划重复警报 documentation,您可以将 AlarmManager
与 PendingIntent
一起使用,如下所示。
当您启动该服务时,您可以随时设置闹钟并将闹钟设置为使用当前时间立即触发。
当闹钟响起时,它会向广播接收器发送一个意图(在下面的例子中是 AlarmReceiver
- 只需自己制作)。然后你可以从 AlarmReceiver
.
整个 documentation 可能值 运行,因为我发现它非常有用。最多只需要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
)