我有一个在后台运行的服务。我希望它可以执行一个动作,只有当某个活动正在运行时。如何从服务中测试活动是否正在运行?
答案 0 :(得分:2)
您可以使用程序包管理器和活动管理器:
PackageManager:用于检索与当前安装在设备上的应用程序包相关的各种信息的类。您可以通过getPackageManager().
ActivityManager:与系统中运行的整体活动互动。
但是,更简单的方法是:在启动Activity
(onCreate / onResume)时,发送带有service.send(..)的消息或带有service.onStartCommand(..)的Intent,以便服务知道您的特定活动已经启动。
答案 1 :(得分:0)
也许你可以反过来做,从你的活动向服务发送意图。
例如,您可以发送活动onResume
的意图,告诉您的服务活动是活动的,另一个是onPause
,告诉服务活动已停止
答案 2 :(得分: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;
}