为什么我的BatteryStatusBroadcastReceiver在插拔充电器时频繁显示Toast消息?

问题描述 投票:0回答:1

我在我的 Android 应用程序中实现了一个 BatteryStatusBroadcastReceiver 来显示 toast 消息,指示设备是否正在充电或放电。但是,我遇到了一个问题,每次我插入拔下充电器时,都会经常显示toast消息。我希望在插入或拔出充电器时仅显示一次吐司消息。我该如何修改我的代码来实现这一目标?

我尝试搜索但找不到解决方案。下面是代码

class BatteryStatusBroadcastReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {

    val batteryState = intent?.getIntExtra(BatteryManager.EXTRA_STATUS,-1)

    when(batteryState){
        BatteryManager.BATTERY_STATUS_CHARGING, BatteryManager.BATTERY_STATUS_FULL -> {
            Toast.makeText(context, "Charging", Toast.LENGTH_SHORT).show()
        }
        BatteryManager.BATTERY_STATUS_DISCHARGING, BatteryManager.BATTERY_STATUS_NOT_CHARGING -> {
            Toast.makeText(context, "Discharging", Toast.LENGTH_SHORT).show()
        }
     }

   }
}

下面是我的活动类,我从那里注册我的广播

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContentView(R.layout.activity_main)


    registerReceiver(BatteryStatusBroadcastReceiver(),
        IntentFilter(Intent.ACTION_BATTERY_CHANGED)
    )
  }
}

更新: 我想出了以下方法(它有效)

class BatteryStatusBroadcastReceiver: BroadcastReceiver() {
var isCharging = false
var isDischarging = false

override fun onReceive(context: Context?, intent: Intent?) {

    val batteryState = intent?.getIntExtra(BatteryManager.EXTRA_STATUS,-1)

    if((batteryState == BatteryManager.BATTERY_STATUS_CHARGING || batteryState == BatteryManager.BATTERY_STATUS_FULL) && !isCharging){
        isCharging = true
        isDischarging = false
        Toast.makeText(context, "Charging", Toast.LENGTH_SHORT).show()
    }

    if((batteryState == BatteryManager.BATTERY_STATUS_DISCHARGING || batteryState == BatteryManager.BATTERY_STATUS_NOT_CHARGING) && !isDischarging){
        isCharging = false
        isDischarging = true
        Toast.makeText(context, "Discharging", Toast.LENGTH_SHORT).show()
     }

    }
 }
android kotlin broadcastreceiver battery batterymanager
1个回答
0
投票

在电池状态接收器中,它还提供电池温度,因为当您将手机充电时,当电池温度发生变化时,它会频繁触发,但当设备未充电时,不会发生这种情况,因为此时温度保持稳定。

© www.soinside.com 2019 - 2024. All rights reserved.