我有一个在后台运行的服务。我希望它可以执行一个动作,只有当某个活动正在运行时。如果活动正在运行,我如何从服务测试?
问问题
340 次
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 回答