Java 保持NotificationListenerService活动的变通方法
这是一个很好的例子 NotificationListenerService在应用程序更新过程中被终止,有时甚至是随机终止,并且不会自动重新启动。此外,它甚至不能手动启动,但我们必须提示用户重新启动设备,因为服务似乎只能在设备启动时启动 以下操作不起作用(尝试手动启动服务):Java 保持NotificationListenerService活动的变通方法,java,android,Java,Android,这是一个很好的例子 NotificationListenerService在应用程序更新过程中被终止,有时甚至是随机终止,并且不会自动重新启动。此外,它甚至不能手动启动,但我们必须提示用户重新启动设备,因为服务似乎只能在设备启动时启动 以下操作不起作用(尝试手动启动服务): 有什么解决办法吗?我需要该服务持续运行并获取OnNotificationPosted事件。这可能无法完全解决您的问题,但可能有助于随机终止该服务。我也有类似的问题。虽然我用另一种方法解决了这个问题,但我发现了前台服务 显然,
有什么解决办法吗?我需要该服务持续运行并获取OnNotificationPosted事件。这可能无法完全解决您的问题,但可能有助于随机终止该服务。我也有类似的问题。虽然我用另一种方法解决了这个问题,但我发现了前台服务 显然,安卓为了节省内存而终止了你的通知服务,这也解释了这种看似随机的终止
为了解决这个问题,您可以使用一个不会被Android杀死的前台服务,该服务将一直运行。请参阅。您是否尝试设置
开始粘性
?更多信息: 也许我的回答也能帮助你。请看一看
尝试使用此代码手动禁用并重新启用该服务
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);
}
您可以捕获广播意图。操作\u包\u已更改
,以了解服务何时被禁用
您可以使用此代码检查通知服务是否已启用
private static boolean isNotificationListenerServiceEnabled(Context context) {
Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(context);
if (packageNames.contains(context.getPackageName())) {
return true;
}
return false;
}
私有静态布尔值isNotificationListenerServiceEnabled(上下文){
设置packageNames=NotificationManagerCompat.getEnabledListenerPackages(上下文);
if(packagename.contains(context.getPackageName()){
返回true;
}
返回false;
}
操作系统负责启动服务。我们所能做的就是添加一个意图过滤器,并要求用户为我们的应用程序启用“通知访问”。我们不应该(也不能)直接启动或停止扩展的服务。操作系统负责启动服务。我们所能做的就是添加一个意图过滤器,并要求用户为我们的应用程序启用“通知访问”。我们不应该(也不能)直接启动或停止扩展的服务。它是由Android自动启动的。使用startService()或stopService()无效。嘿,Aditya,你找到解决方法了吗?我考虑请求用户禁用电池优化,并可能将其转换为前台服务。我还没有尝试过。不幸的是,没有。我最终放弃了需要此功能的功能:/
private static boolean isNotificationListenerServiceEnabled(Context context) {
Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(context);
if (packageNames.contains(context.getPackageName())) {
return true;
}
return false;
}