服务以持续检查前台应用程序并相应地执行任务

时间:2014-07-25 13:30:58

标签: java android service

我正在尝试创建一个能够持续检查前台应用程序的服务,当某个应用程序进入前台时,执行任务。当它退出前台时,执行另一项任务。这应该重复发生,直到用户停止服务(我已经完成服务处理)。

我不知道如何解决这个问题。以下是我检查当前前台应用程序的方法:

    /* Get all Tasks available (with limit set). */
    ActivityManager mgr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> allTasks = mgr.getRunningTasks(showLimit);
    /* Loop through all tasks returned. */
    for (ActivityManager.RunningTaskInfo aTask : allTasks) 
    {                  
        Log.i("MyApp", "Task: " + aTask.baseActivity.getClassName()); 

        if (aTask.baseActivity.getClassName().equals("package")) 
            running=true;
    }

然后,我有一个简单的if / else检查运行状态并根据需要执行任务:

if(running =! true) {
    MainActivity defaults = new MainActivity();
    defaults.RunAsRoot(commandsdefault);
}

else {
    MainActivity defaults = new MainActivity();
    defaults.RunAsRoot(commands);
}

现在,它不会连续运行,只会执行一次并停止运行。所以,我将onCreate()的全部内容放在while()

boolean justrun = true;

while(doit = true) {
    //everything here: foreground checker, along with if/else
}

那也没有奏效:一切都只是超级慢,最终强行关闭,我假设因为它占用了所有资源。

我该怎么做呢?主要目标似乎非常简单......我只想获取前台应用程序包名称,并在更改时执行命令。

编辑:我在MyService中添加了以下方法:

public int serviceservice() {

    boolean running = true;
    int showLimit = 20;
    boolean doit = true;

    /* Get all Tasks available (with limit set). */
    ActivityManager mgr = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> allTasks = mgr.getRunningTasks(showLimit);
    /* Loop through all tasks returned. */
    for (ActivityManager.RunningTaskInfo aTask : allTasks) 
    {                  
        Log.i("MyApp", "Task: " + aTask.baseActivity.getClassName()); 

        if (aTask.baseActivity.getClassName().equals("package")) 
            running=true;
    }

    if(running =! true) {
        MainActivity defaults = new MainActivity();
        defaults.RunAsRoot(commandsdefault);


     }


    return START_STICKY;

}

我打电话给serviceservice();在我的OnCreate()和onStart()中。它仍然只运行一次。 :/

0 个答案:

没有答案