Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保持NotificationListenerService活动的变通方法_Java_Android - Fatal编程技术网

Java 保持NotificationListenerService活动的变通方法

Java 保持NotificationListenerService活动的变通方法,java,android,Java,Android,这是一个很好的例子 NotificationListenerService在应用程序更新过程中被终止,有时甚至是随机终止,并且不会自动重新启动。此外,它甚至不能手动启动,但我们必须提示用户重新启动设备,因为服务似乎只能在设备启动时启动 以下操作不起作用(尝试手动启动服务): 有什么解决办法吗?我需要该服务持续运行并获取OnNotificationPosted事件。这可能无法完全解决您的问题,但可能有助于随机终止该服务。我也有类似的问题。虽然我用另一种方法解决了这个问题,但我发现了前台服务 显然,

这是一个很好的例子

NotificationListenerService在应用程序更新过程中被终止,有时甚至是随机终止,并且不会自动重新启动。此外,它甚至不能手动启动,但我们必须提示用户重新启动设备,因为服务似乎只能在设备启动时启动

以下操作不起作用(尝试手动启动服务):


有什么解决办法吗?我需要该服务持续运行并获取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; 
}