我在我的 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()
}
}
}
在电池状态接收器中,它还提供电池温度,因为当您将手机充电时,当电池温度发生变化时,它会频繁触发,但当设备未充电时,不会发生这种情况,因为此时温度保持稳定。