簡體   English   中英

在android中檢測廣播接收器中的日期變化事件

[英]Detect day change event in broadcast receiver in android

我想在Android應用程序中實現一個功能,即使我的應用程序沒有運行,也會在有更改日期時(00:00 AM)執行特定代碼。

我可能會遲到回答這個問題,但我個人也遇到了同樣的問題。 對於日期更改,您可以簡單地使用具有操作“android.intent.action.DATE_CHANGED”的廣播接收器,並且只要日期更改(用戶隱式或顯式),它就會觸發。 我希望這能幫助那些通過谷歌來到這里的人。

要完成@ gaurav-jain的回答,我在這里舉一個例子,在這種情況下,檢測一天是否已經改變:

abstract class DayChangedBroadcastReceiver : BroadcastReceiver() {

    private var date = Date()
    private val dateFormat by lazy { SimpleDateFormat("yyMMdd", Locale.getDefault()) }

    override fun onReceive(context: Context, intent: Intent) {
        val action = intent.action

        val currentDate = Date()

        if ((action == Intent.ACTION_TIME_CHANGED || action == Intent.ACTION_TIMEZONE_CHANGED) && !isSameDay(currentDate)) {
            date = currentDate
            onDayChanged()
        }
    }

    private fun isSameDay(currentDate: Date) = dateFormat.format(currentDate) == dateFormat.format(date)

    abstract fun onDayChanged()

    companion object {

        /**
         * Create the [IntentFilter] for the [DayChangedBroadcastReceiver].
         *
         * @return The [IntentFilter]
         */
        fun getIntentFilter() = IntentFilter().apply {
            addAction(Intent.ACTION_TIME_TICK)
            addAction(Intent.ACTION_TIMEZONE_CHANGED)
            addAction(Intent.ACTION_TIME_CHANGED)
        }
    }
}

在您的活動中創建DayChangedBroadcastReceiver

private val dayChangedBroadcastReceiver = object : DayChangedBroadcastReceiver() {

        override fun onDayChanged() {
            // TODO Reload data
        }
    }

在您的活動/片段中注冊:

 override fun onResume() {
        super.onResume()
        activity?.registerReceiver(dayChangedBroadcastReceiver, DayChangedBroadcastReceiver.getIntentFilter())
    }

取消注冊您的活動/片段:

    override fun onPause() {
        super.onPause()
        activity?.unregisterReceiver(dayChangedBroadcastReceiver)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM