Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测特定应用程序(不是我的)何时对用户可见/不可见_Android - Fatal编程技术网

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

Android 检测特定应用程序(不是我的)何时对用户可见/不可见,android,Android,我目前正在尝试编写一个应用程序,当应用程序处于活动状态时,它将自动更改某些设置(关闭声音等),并在应用程序不再处于活动状态时恢复到原始设置 已编辑 对不起,我想我对这个问题解释得不好。我目前正在尝试编写一个应用程序,能够检测用户何时可以看到某个应用程序(例如youtube应用程序),这意味着用户刚刚启动/导航到youtube应用程序 当我检测到这一点时,我希望执行某些设置更改,例如关闭手机的声音(我已经了解了这一部分)。然后,当我检测到用户看不到youtube应用程序时,我想将设置恢复到原来的状

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

已编辑 对不起,我想我对这个问题解释得不好。我目前正在尝试编写一个应用程序,能够检测用户何时可以看到某个应用程序(例如youtube应用程序),这意味着用户刚刚启动/导航到youtube应用程序

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

我想知道的是检测任何应用程序(不是我的应用程序)何时对用户可见/不可见的机制

有点像应用程序Tasker所做的

我正试图弄清楚它是如何做到这一点的。似乎没有任何广播接收器会在应用程序激活时发出通知。我可以想到的一种方法是创建一个不断轮询当前正在运行的任务的服务。。但这似乎会带来非常糟糕的性能

有没有其他人可以建议的替代方案


提前谢谢你

你说的主动是什么意思?应用程序正在运行或终止,您有两个钩子来更改应用程序的行为,并且


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

您可能想要运行进程的列表,并对其进行处理。
可以使用以下代码执行此操作:

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
    }
}
ActivityManager actMngr=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
List runningAppProcesses=actMngr.getRunningAppProcesses();
for(RunningAppProcessInfo pi:RunningAppProcesss){
//检查pi.processName并完成您的工作
//还要检查pi重要性-检查流程是在前台还是后台
if(pi.importance==RunningAppProcessInfo.importance\u前台){
//做你的事
}
}
请注意,要列出流程,您需要“获取任务”权限。
您可以通过将以下内容添加到清单中来完成此操作:

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


所说的“活动”是指应用程序是否可见,即用户没有按home键或导航到其他活动?您所说的“当应用程序处于活动/非活动状态时”是什么意思?对不起,我可能没有正确描述这一点。我的意思是,我希望有某种方法来检测任何应用程序(不是我的应用程序)何时可见,何时不再可见。例如,如果用户打开/导航到youtube应用程序,我的应用程序将自动将手机声音调至最大值,当他们退出youtube应用程序或移动到另一个应用程序时,我的应用程序将再次恢复旧的声音设置。你好,pandre,谢谢你的回答,这正是我想要执行的操作,但是,我的问题实际上是检测何时执行您刚才给出的代码。我一直在考虑用服务不断轮询正在运行的进程列表,但这似乎会带来糟糕的性能。我在我的应用程序中就是这么做的——我定期轮询进程列表。您可以使用处理程序来执行我发布的代码