我有一个简单的Android Kotlin应用程序,其部分功能是监听电源连接和断开并执行相应操作。
这是我的旧代码,在面向Oreo以下设备时完全正常工作。
AndroidManifest.xml
<receiver android:name=".ChargingUtil$PlugInReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
ChargingUtil.kt
class ChargingUtil (context: Context){
/*... Some other charging-related functions here ... */
class PlugInReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.d("thisistest", "Power was changed")
// Here I do some logic with `intent.action`
}
}
}
最近的Android版本在实现广播方面做了一些更改,具体信息请参考此处文档。
我尝试过的方法如下:
- 我按照这个文档中的说明实现了代码,但是它们的实现与我的当前代码相同(仅适用于Android 8以下版本)。 - 我还找到了这个问题,但是唯一的解决方案是定期检查电源是否连接,我认为这对我来说不太可行,因为我的应用需要即时知道充电状态何时发生变化。
所以,我的问题是:如何在电源连接/断开时调用函数?同时考虑到运行Android 8或更高版本的系统对清单声明的接收器施加的附加限制。
注意:我使用Kotlin,并希望避免使用已过时的包。
我在Android方面有点新手,如果有任何明显的解决方案我错过了,请提前谅解。先感谢您的帮助。
NotificationCompat.Builder
已经被弃用了。因此,我添加了另一个更简洁的 答案,使用 Kotlin 编写,以防有人需要。 - Lissy93