用于getRunningServices的Android O替换

在以前的Android版本中,我使用此方法查找来自其他应用程序的服务是否已启动并正在运行。 它对我来说可靠:

ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List services = manager.getRunningServices(Integer.MAX_VALUE); 

但是,对于Android O,现在不推荐使用它,只会返回有关调用应用程序服务的信息。 我已经研究过其他解决方案,但我不想要求用户提供更多权限(UsageStatsManager,NotificationManager等)。

是否有另一种解决方案可以获取Android O中是否有来自其他应用的服务正在运行?

这就是我刚刚完成的工作,它运作得很好。 如果您使用的服务在您自己的应用程序中,只需创建一个具有启动或停止的布尔variables的单例。 服务启动时,请确保更新该variables。

 public class SingletonServiceManager { public static boolean isMyServiceRunning = false; } 

以上是我用于小型单例类的所有内容,稍后在其他类中,您想知道服务是否正在运行…

 if(SingletonServiceManager.isMyServiceRunning == true){ // do something (btw, you don't need the == true portion) } 

您只需管理此值的更新位置和时间。 例如,在启动服务(服务内部)时将其设置为true。 然后,在停止服务时(从服务内部)将布尔值更新为false。 由于此代码不使用任何函数,因此它将超出API升级的范围,并且不能弃用。