无法从ACTION_BATTERY_CHANGED更新BroadcastReceiver

时间:2018-09-13 12:10:54

标签: android kotlin android-broadcastreceiver android-intentservice

我已经创建了自定义广播接收器来监听电池的变化(我想监视电池的百分比水平)

但是我没有任何更新。这是我的设置:

class MyService : IntentService("MyService") {

val receiver: PowerConnectionReceiver = PowerConnectionReceiver()

override fun onHandleIntent(intent: Intent?) {
  Timber.d("Service started now")
}

override fun onCreate() {
 val batteryStatus: Intent? = 
 IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
  registerReceiver(receiver, ifilter)
 }

}

class PowerConnectionReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {
     val status: Int = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)
    Timber.d("Battery changed")
    }
  }
}

1 个答案:

答案 0 :(得分:3)

IntentService运行的1毫秒内,您将收到更新。 IntentService返回后,您的onHandleIntent()就会关闭。 IntentService是专为短期交易而不是长期经营而设计的。

切换到常规Service。确保它是前台服务(使用startForeground()),否则它将仅在Android 8.0+上运行1分钟。