2

我有一个在后台运行的服务。我希望它可以执行一个动作,只有当某个活动正在运行时。如果活动正在运行,我如何从服务测试?

4

3 回答 3

2

您可以使用包管理器和活动管理器:

PackageManager:用于检索与当前安装在设备上的应用程序包相关的各种信息的类。您可以通过getPackageManager().

ActivityManager:与系统中运行的整体活动进行交互。

但是,更简单的方法是:在启动Activity(onCreate/onResume) 时,使用 service.send(..) 发送消息或使用 service.onStartCommand(..) 发送 Intent,以便服务知道您的特定活动已经开始了。

于 2012-11-16T08:41:58.590 回答
0

也许您可以反过来做,将意图从您的活动发送到服务。

例如,您可以发送一个关于活动的意图onResume,告诉您的服务活动是活动的,另一个 on onPause,告诉服务活动已经停止

于 2012-11-16T08:43:23.610 回答
0

将以下方法与您的包名称一起使用。如果您的任何活动在前台,它将返回 true。

public boolean isForeground(String myPackage){
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
 List< ActivityManager.RunningTaskInfo > runningTaskInfo = am.getRunningTasks(1); 

     ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
   if(componentInfo.getPackageName().equals(myPackage)) return true;
return false;
}
于 2012-11-16T08:45:13.933 回答