Я реализовал BatteryStatusBroadcastReceiver в своем приложении для Android для отображения всплывающих сообщений, указывающих, заряжается или разряжается устройство. Однако я столкнулся с проблемой, из-за которой всплывающие сообщения отображаются часто каждый раз, когда я подключаюсь или отключите зарядное устройство. Я хочу, чтобы всплывающее сообщение отображалось только один раз, когда зарядное устройство подключено или отключено. Как я могу изменить свой код для достижения этой цели?
Я пытался выполнить поиск, но не смог найти решение. Ниже приведен код
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()
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... uently-whe
Почему мой BroadcastReceiver о состоянии батареи часто отображает всплывающие сообщения при подключении или отключении з ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение