在android中监控服务[重复]
Posted
技术标签:
【中文标题】在android中监控服务[重复]【英文标题】:Monitor services in android [duplicate] 【发布时间】:2012-11-11 20:08:31 【问题描述】:可能重复:android: check if a service is running
我有一项服务来执行我的操作,它将无限期地在后台运行。我想监视服务是否正在运行。所以,我想创建另一个服务来监控第一个。
是否还有其他动作过滤器可以广播、服务是否运行?
【问题讨论】:
“它将无限期地在后台运行”——为什么?用户一般不喜欢这样,这就是为什么用户会通过任务杀手、设置中的“强制停止”等摆脱你的服务。 @CommonsWare 如果用户“强制停止”服务,是否可以获得通知? 绝对不是。通过强制停止您的应用程序,用户表示用户不希望您的应用程序再运行,因为您的应用程序行为不端。您的进程将立即终止,并且您不会收到此事实的通知。所以,我再问一次:为什么你有一个“将在后台无限期运行”的服务? @CommonsWare 我想在一项服务中阻止摄像头进程,并想查看另一项服务是否正在运行。如果没有,我想再次重新启动服务 “我想在一项服务中阻止摄像头进程”——才华横溢的程序员使用设备管理 API 来控制对摄像头的访问,而不是玩带有进程和永久服务的幼稚脚本小游戏。 【参考方案1】:Presumably, it is calling getRunningServices() on ActivityManager. There is no documented Intent to go straight to that screen.
第 1 步。首先您需要声明和初始化一些变量:-
private static final String APP_DETAILS_PACKAGE_NAME = “com.android.settings”; // Here you need to define the package name
private static final String SCREEN_CLASS_NAME = “com.android.settings.RunningServices”; // Here you need to define the class name but NOTICE!! you need to define its full name including package name.
步骤 2. 实例化 Intent
Intent intent = new Intent();
步骤 3. 将操作设置为 ACTION_VIEW
intent.setAction(Intent.ACTION_VIEW);
步骤 3. 在 Intent 中设置类名,因为我们知道包可以有多个活动。所以 Intent 需要一些东西来匹配包名中的 Activity。
intent.setClassName(APP_DETAILS_PACKAGE_NAME, SCREEN_CLASS_NAME);
第 4 步。启动 Activity
context.startActivity(intent);
在上面的示例中,如果您想访问其他屏幕,请根据需要更改 APP_DETAILS_PACKAGE_NAME 和 SCREEN_CLASS_NAME。
【讨论】:
【参考方案2】:您可以使用getRunningServices(int max)
或ActivityManager
ActivityManager actManager = // 获取活动管理器
int max = ??;
List<ActivityManager.RunningServiceInfo> runningServices = actManager.getRunningServices(max);
for(ActivityManager.RunningServiceInfo runningService : runningServices)
boolean started = runningService.started;
注意:此方法仅用于调试或实现服务管理类型的用户界面。
【讨论】:
我想知道,服务停止时是否有任何通知可用?..或者我想在无限时间内在服务中检查此方法?以上是关于在android中监控服务[重复]的主要内容,如果未能解决你的问题,请参考以下文章