簡體   English   中英

如果應用程序在 android oreo 及更早版本中被殺死,則顯式廣播接收器不會啟動

[英]Explicit Broadcast receiver dont launch if app is killed in android oreo and earlier

我需要有關我的時鍾鬧鍾應用程序的幫助。 我已經聲明了一個廣播接收器來觸發時鍾警報

清單.xml

<receiver android:name=".view.broadcastreceivers.ClockAlarmReceiver"/>

class ClockAlarmReceiver.kt

class ClockAlarmReceiver : BroadcastReceiver() {
  override fun onReceive(context: Context?, intent: Intent?) {
        alarm = intent?.getStringExtra(ALARM_VIEW_EXTRA)?.let { fromJson<Alarm>(it) }!!
        Log.d("ClockAlarmReceiver ", "Received $alarm")
   }
}

我以這種方式啟動待處理的意圖

...

 val alarmPendingIntent = Intent(context, ClockAlarmReceiver::class.java).let { intent ->
            intent.putExtra(ALARM_VIEW_EXTRA, alarm.toJson())
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
            PendingIntent.getBroadcast(
                context, alarmId.toInt(), intent,
                PendingIntent.FLAG_UPDATE_CURRENT
            )
        }
        val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        alarmManager.setExact(
            AlarmManager.RTC_WAKEUP,
            targetTime.timeInMillis,
            alarmPendingIntent
        )
...

這些是我的 sdk 配置

    'compileSdk': 29,
    'minSdk'    : 21,
    'targetSdk' : 29

它在 android 9.0 和 10 上運行良好,但在 8 和以前的版本中,當應用程序被殺死時無法運行

在此先感謝您的幫助

嘿,如果有人遇到同樣的問題,我發現了 2 件事:1. Alarmanager 是應用程序關閉時從未觸發的事情 2. 這種行為僅在應用程序處於調試狀態時發生,我不知道為什么,但是當我創建了運行良好的發布版本

正如android 開發人員文檔中所述,警報管理器在打盹模式或應用程序處於睡眠狀態時將無法工作,如果您需要確保即使在設備空閑時也能完成工作,請使用 - setExactAndAllowWhileIdle() 而不是 set( ) 與警報管理器。 例子 -

(USE)
alarmMgr.setExactAndAllowWhilwIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);

(DON'T USE)- 
alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);

暫無
暫無

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

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