0

我正在使用应用程序来监控孩子可以在 Android 设备上玩游戏多长时间。

我知道如何使用以下方法获取正在运行的应用程序列表:

List<RunningTaskInfo> tasks = activityManager.getRunningTasks(1);//Integer.MAX_VALUE

现在我想要一种方法来关闭这个应用程序,或者只是把它放在后台。

看看我的代码:

private void verifyIfHasToCloseAnyApp() {
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> tasks = activityManager.getRunningTasks(1);//Integer.MAX_VALUE
    List<AppBlocked> appBlockeds = listAllAppBlocked();

        for (RunningTaskInfo runningTaskInfo : tasks) {

            String packageName = runningTaskInfo.topActivity.getPackageName();

            for(AppBlocked appBlocked : appBlockeds) {
                String packageBlocked = appBlocked.getAppPackage();
                if(packageName.equals(packageBlocked)) {
                    if(appBlocked.isTimeToClose())
            /*Here I have to close or put this app in background */
                }   
            }

        }
}

可能吗?

谢谢。

4

1 回答 1

0

您不能通过标准 api 执行此操作。编辑或者您可以:https ://stackoverflow.com/a/7197265/1434792

您可以通过执行ps命令

Process process = Runtime.getRuntime().exec("ps");

然后在此命令的输出中找到要杀死的进程的pid ,然后使用此pid运行kill命令。

    Process process = Runtime.getRuntime().exec("kill " + pid);

可能您需要具有 root 访问权限才能执行此操作,但我不确定。如果你需要这个而不是杀死这个过程

        Process process = Runtime.getRuntime().exec("su");

        DataOutputStream os = new DataOutputStream(process.getOutputStream());
        InputStream is = process.getInputStream();
        os.writeBytes("kill " + pid+ "\n");
        int readed = 0;
        byte[] buff = new byte[4096];
                    os.writeBytes("exit\n");
        os.flush();
                process.destroy();
于 2014-01-02T07:21:46.400 回答