Я делаю приложение для будильника. (Android 10 (API-уровень 29))
Моя цель
- установить время во фрагменте (
AlarmFrag
) - начать заданную c активность (
LoadingActivity
), используя broadcastReceiver
в то время, что настройка в AlarFrag
Моя ситуация: LoadingActivity
запускается, когда приложение работает на переднем плане. Но если я установлю время и закрою это приложение, LoadingActivity
не запускается ...
Но иногда это работает ...: (
Мой код ...
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent){
context.startActivity(alarmactivity)
Log.d("eoor", "receiver on") // I checked that this log displays on the Logcat
// and codes below work without error(using try catch)
val id = Intent(context, AlarmActivity::class.java)
id.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(id)
}
}
class AlarmFrag : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
diaryNotification(calendar) // skip calendar setting..
return view
}
fun diaryNotification(calendar: Calendar) {
val receiver = ComponentName(requireContext(), DeviceBootReceiver::class.java)
val alarmIntent = Intent(requireContext(), AlarmReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(requireContext(), 0, alarmIntent, 0)
val alarmManager = requireContext().getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (alarmManager != null) {
alarmManager.setRepeating(
AlarmManager.RTC_WAKEUP, calendar.timeInMillis,
AlarmManager.INTERVAL_DAY, pendingIntent
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
calendar.timeInMillis,
pendingIntent)
}
}
}
}