这是一个known bug。
NotificationListenerService在应用程序更新期间被杀死,有时甚至被随机杀死,并且不会自动重启。此外,它甚至无法手动启动,但是我们必须提示用户重新启动设备,因为该服务似乎只能在设备启动时启动。
以下无效(尝试手动启动服务):
startService(new Intent(this, NotificationService.class));
有什么解决方法吗?我需要该服务不断运行并获取OnNotificationPosted事件。
最佳答案
尝试使用此代码来手动禁用和重新启用服务
private void toggleNotificationListenerService() {
PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(this, your.NotificationListenerServiceImpl.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
pm.setComponentEnabledSetting(new ComponentName(this, your.NotificationListenerServiceImpl.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
您可以捕获广播的
Intent.ACTION_PACKAGE_CHANGED
来了解何时禁用该服务。并且您可以使用此代码来检查您的通知服务是否已启用。
private static boolean isNotificationListenerServiceEnabled(Context context) {
Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(context);
if (packageNames.contains(context.getPackageName())) {
return true;
}
return false;
}