安卓监听电量变化
2021-01-14 本文已影响0人
蓝不蓝编程
主要代码
class MainActivity : AppCompatActivity() {
private lateinit var listener: BatteryListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listener = BatteryListener(this)
listener.register(object : BatteryStateListener {
override fun onStateChanged() {
toast("电量有变")
}
override fun onStateLow() {
toast("电量低")
}
override fun onStateOkay() {
toast("已充满")
}
override fun onStatePowerConnected() {
toast("电源线已连接")
}
override fun onStatePowerDisconnected() {
toast("电源线已断开")
}
})
}
private fun toast(msg: String) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
}
override fun onDestroy() {
listener.unregister()
super.onDestroy()
}
}
class BatteryListener(private val mContext: Context) {
private val receiver: BatteryBroadcastReceiver?
private var mBatteryStateListener: BatteryStateListener? = null
fun register(listener: BatteryStateListener?) {
mBatteryStateListener = listener
if (receiver != null) {
val filter = IntentFilter()
filter.addAction(Intent.ACTION_BATTERY_CHANGED)
filter.addAction(Intent.ACTION_BATTERY_LOW)
filter.addAction(Intent.ACTION_BATTERY_OKAY)
filter.addAction(Intent.ACTION_POWER_CONNECTED)
filter.addAction(Intent.ACTION_POWER_DISCONNECTED)
mContext.registerReceiver(receiver, filter)
}
}
fun unregister() {
if (receiver != null) {
mContext.unregisterReceiver(receiver)
}
}
private inner class BatteryBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
Intent.ACTION_BATTERY_CHANGED -> if (mBatteryStateListener != null) {
mBatteryStateListener!!.onStateChanged()
}
Intent.ACTION_BATTERY_LOW -> if (mBatteryStateListener != null) {
mBatteryStateListener!!.onStateLow()
}
Intent.ACTION_BATTERY_OKAY -> if (mBatteryStateListener != null) {
mBatteryStateListener!!.onStateOkay()
}
Intent.ACTION_POWER_CONNECTED -> if (mBatteryStateListener != null) {
mBatteryStateListener!!.onStatePowerConnected()
}
Intent.ACTION_POWER_DISCONNECTED -> if (mBatteryStateListener != null) {
mBatteryStateListener!!.onStatePowerDisconnected()
}
}
}
}
interface BatteryStateListener {
fun onStateChanged()
fun onStateLow()
fun onStateOkay()
fun onStatePowerConnected()
fun onStatePowerDisconnected()
}
init {
receiver = BatteryBroadcastReceiver()
}
}