检测特定应用程序(不是我的)何时变得可见/对用户不可见

时间:2011-06-21 09:35:23

标签: android

我正在尝试编写一个应用程序,当应用程序变为活动状态时会自动更改某些设置(关闭声音等),并在应用程序不再处于活动状态时恢复为原始设置。

EDITED 对不起,我相信我很难解释这个问题。我目前正在尝试编写一个应用程序,能够检测到某个应用程序(例如,youtube应用程序)何时对用户可见,这意味着用户刚刚启动/导航到youtube应用程序。

当我检测到这个时,我想执行某些设置更改,例如关闭手机的声音(我已经将这部分想出来了)。然后,当我检测到用户不再看到youtube应用程序时,我想将设置恢复到原来的状态。

我想知道的是检测何时应用程序(不是我的应用程序)变得可见/不可见的机制。

有点像应用程序Tasker所做的那样。

我试图弄清楚它是如何实现这一目标的。似乎没有任何广播接收器会通知应用程序变为活动状态。我能想到的一种方法是创建一个不断轮询当前正在运行的任务的服务..但这似乎会带来非常糟糕的性能。

有人可能会建议吗?

提前谢谢

2 个答案:

答案 0 :(得分:2)

您可能需要正在运行的进程列表并对其执行某些操作 您可以使用以下代码执行此操作:

ActivityManager actMngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses();
for (RunningAppProcessInfo pi : runningAppProcesses) {
    //Check pi.processName and do your stuff
    //also check pi importance - check if process is in foreground or background
    if (pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
        //DO YOUR STUFF
    }
}

请注意,要列出流程,您需要GET_TASKS权限 您可以通过将其添加到清单来执行此操作:

<uses-permission android:name="android.permission.GET_TASKS" />    

答案 1 :(得分:0)

你是什么意思活跃?应用程序正在运行或已终止,并且您有2个挂钩可以更改应用程序onCreate()onTerminate()的行为

另一方面,应用程序具有不同的组件,如活动,并且活动具有更复杂的lifecycle具有类似的挂钩。