有没有办法在android中保留AlarmManager,即使任务死亡?
我正在使用AlarmManager制作一个闹钟应用程序。问题是,如果我在任务中关闭应用程序,AlarmManager将无法工作。我怎么修理它 维护性 工作广播.kt AndroidManifest.xml有没有办法在android中保留AlarmManager,即使任务死亡?,android,alarmmanager,android-task,Android,Alarmmanager,Android Task,我正在使用AlarmManager制作一个闹钟应用程序。问题是,如果我在任务中关闭应用程序,AlarmManager将无法工作。我怎么修理它 维护性 工作广播.kt AndroidManifest.xml 能否请您共享该片段,以查看如何调用或从中调用scheduleAlarm?当只需在MainActivity中按下按钮时,scheduleAlarm()将通过setOnClickListener实现。实际上,我不需要作为小参数值接收的上下文。嗯,可能是您试图传递活动上下文,因为它可能在活动生命周
能否请您共享该片段,以查看如何调用或从中调用scheduleAlarm
?当只需在MainActivity
中按下按钮时,scheduleAlarm()将通过setOnClickListener实现。实际上,我不需要作为小参数值接收的上下文。嗯,可能是您试图传递活动上下文,因为它可能在活动生命周期结束时被垃圾收集。考虑将应用上下文传递为该方法的参数,谢谢您的答复。我将代码中的所有上下文
或此
部分更改为applicationContext
或context.applicationContext
。但同样地,如果我在任务中关闭应用程序,它仍然无法工作…您能否共享该片段,以了解如何调用或从中调用scheduleAlarm
?当只需在MainActivity
中按下按钮时,scheduleAlarm()将通过setOnClickListener实现。实际上,我不需要作为小参数值接收的上下文。嗯,可能是您试图传递活动上下文,因为它可能在活动生命周期结束时被垃圾收集。考虑将应用上下文传递为该方法的参数,谢谢您的答复。我将代码中的所有上下文
或此
部分更改为applicationContext
或context.applicationContext
。但同样,如果我在任务中关闭应用程序,它仍然无法工作。。。
fun scheduleAlarm(context: Context) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val i = Intent(context, WorkBroadcast::class.java)
val calendar: Calendar = Calendar.getInstance()
calendar.timeInMillis = System.currentTimeMillis()
calendar.set(Calendar.HOUR_OF_DAY, hour)
calendar.set(Calendar.MINUTE, minute)
calendar.set(Calendar.SECOND, 0)
calendar.set(Calendar.MILLISECOND, 0)
i.putExtra("trigger", calendar.timeInMillis)
val p = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, p)
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, p)
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, p)
}
}
class WorkBroadcast : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val sdf = SimpleDateFormat("hh:mm:ss", Locale.getDefault())
val trigger = intent.getLongExtra("trigger", 0)
val notification = WorkNotification.sendNotification(context, sdf.format(trigger))
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
manager.notify(0, notification)
}
}
<receiver
android:name=".WorkBroadcast"
android:enabled="true" >
</receiver>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>