Как начать деятельность с помощью BroadcastReceiver? - PullRequest
0 голосов
/ 02 мая 2020

Я делаю приложение для будильника. (Android 10 (API-уровень 29))

Моя цель

  1. установить время во фрагменте (AlarmFrag)
  2. начать заданную 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)
                }
            }
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...