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
相关产品推荐
相关产品推荐

