我正在应用程序中监控孩子在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 */
}
}
}
}
有可能吗?
感谢。
答案 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();