这是一个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;
}

10-07 22:05