Повторяющийся сигнал тревоги дает неточное время уведомления - PullRequest
0 голосов
/ 06 августа 2020

Я установил повторяющийся будильник на 3:55. Предположим, в полдень в 13:00 я нажимаю кнопку будильника из приложения. Мгновенно я получаю уведомление о будильнике в 3:55. но почему это? На следующий день я получаю уведомление в точное время.

Я конвертирую время будильника в миллисекунды. 1-й получить строку в этом формате гггг / ММ / дд "" ЧЧ: мм: сс ... затем преобразуйте его в миллисекунды с помощью функции местного времени. И установите это время в миллисекундах в методе am.setRepeating.

     val d: DateFormat = SimpleDateFormat("yyyy/MM/dd")
        val currenttime: DateFormat = SimpleDateFormat("HH:mm:ss")
        val timeformate: DateFormat = SimpleDateFormat("hh:mm")
        var time = timeformate.parse(singletime)

        //alarm_localtime
        val now: String = d.format(Date())
        //current_localtime
       // var currenttim = now + " " + currenttime.format(Date())
       // var current_local_time = localtime(currenttim)

        var alarmtime = (now + " " + singletime)
        var alarm_local_Time =  localtime(alarmtime)


        val notificationmassage = Intent(applicationContext, Notificationmassage::class.java)
        notificationmassage.putExtra("time", timeformate.format(time));

        val pendingintent = PendingIntent.getBroadcast(
            mContext,
            pos,
            notificationmassage,
            PendingIntent.FLAG_UPDATE_CURRENT
        )
        val am = mContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        //Log.e("currenttime",Calendar.getInstance().getTimeInMillis().toString() )
       // Log.e("alarmttime",alarm_local_Time.toString() )
        am.setRepeating(
            AlarmManager.RTC_WAKEUP,
            alarm_local_Time,
            AlarmManager.INTERVAL_DAY,
            pendingintent
        )




 @RequiresApi(Build.VERSION_CODES.O)
    fun localtime(time: String): Long {
        var local_time =
            LocalDateTime.parse(time.replace(" ", "T").replace("/", "-"))
                .atZone(ZoneId.systemDefault())
                .toInstant()
                .toEpochMilli()
        return local_time
    }

1 Ответ

1 голос
/ 06 августа 2020

Поскольку вы устанавливаете его на текущую дату и на 13:00 для 3:55, которое уже прошло, то это уведомление запускается. попробуйте добавить день к дате, если метка времени старше текущего времени.

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