如何在Android上通过我自己的应用关闭第三方应用

时间:2014-01-02 07:08:56

标签: android activity-manager

我正在应用程序中监控孩子在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 */
                }   
            }

        }
}

有可能吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您无法通过标准API执行此操作。 修改或者您可以:https://stackoverflow.com/a/7197265/1434792

您可以通过

执行 ps 命令
Process process = Runtime.getRuntime().exec("ps");

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

    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();