You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:BatteryStatusBroadcastReceiver插拔充电器时Toast频繁弹出如何解决

问题:插拔充电器时Toast频繁弹出,如何仅触发一次提示?

我在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()
        }
     }

   }
}

注册广播的Activity代码

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


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

解决方案

我自己想出了可行的方案,通过在广播接收器中维护状态标记,仅在状态发生切换时显示Toast:

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()
     }

    }
 }

内容的提问来源于stack exchange,提问作者Ash Kecthum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 08:33:23