我正在制作一个需要拦截通知的应用程序,尤其是Google Maps通知。为此,我使用了Android的NotificationListenerService。问题在于,在某些设备上(尤其是在Android 9 Pie上),在授予通知访问权限后,监听器不会立即启动。同样,即使服务已启动,它也不会收到任何通知。该问题解决了删除和重置权限的问题,但这很烦人。
以前,我还有另一个问题,服务已被系统破坏,但是此解决方案Notification Listener Service does not work after app is crashed
因此,在侦听器中,我实现了上面链接的解决方案。但这似乎不足以使其正常工作。正如我之前所说,大多数情况下,删除和重置通知访问权限足以“触发”侦听器,并且它开始正常工作,所以为什么它不应该第一次工作?
这是我的代码: 重写fun onNotificationPosted(sbn:StatusBarNotification?){ appManager?.postNotification(sbn) }
override fun onNotificationRemoved(sbn: StatusBarNotification?) {
super.onNotificationRemoved(sbn)
appManager?.removedNotification(sbn)
}
override fun onListenerConnected() {
super.onListenerConnected()
setLocale()
isListenerConnected = true
//code to set the listener as foreground...
}
override fun onListenerDisconnected() {
super.onListenerDisconnected()
isListenerConnected = false
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
Log.e("NotificationListener", "Alarm triggered at " + SimpleDateFormat().format(Date()))
if (intent != null && intent.action == Constants.REBIND_NOTIFICATION_LISTENER_ACTION) {
tryReconnectService()//switch on/off component and rebind
}
//START_STICKY to order the system to restart your service as soon as possible when it was killed.
return Service.START_STICKY
}
override fun onBind(intent: Intent?): IBinder? {
return super.onBind(intent)
}
也许有人遇到同样的问题,可以给我解决方案。
弗朗切斯科