自动关闭Android应用程序

11

我阅读了很多关于关闭其他应用程序的文档和帖子。我知道文档说Android不是以那种方式设计的。Android希望将一个应用程序休眠,而不是杀死进程。这很有道理,但是......我编写了一个根据用户配置的系统事件自动启动其他应用程序的应用程序。用户喜欢它,并希望在随后的系统事件之后关闭/杀死这些应用程序。我想说的是,用户要求我为他们自动化这个过程。这就是我的应用程序的目的。它自动启动其他应用程序,现在他们想要自动关闭或杀死它们。很多人说这是不可能的,但事实并非如此。存在几个任务杀手应用程序,它们做着我想做的事情。我尝试了

Process.killProcess(pid); 

但似乎没什么作用。阅读该方法的文档时,它说Linux内核仍将执行权限。我甚至尝试杀死所有进程,但没有任何作用。也许我没有正确地获取要杀死的进程列表。

我使用以下代码来获取要杀死的进程列表:

for(RunningAppProcessInfo info:activityManager.getRunningAppProcesses()){

然后我使用Process.killProcess(info.pid); 来结束进程。我甚至尝试了以下代码:

activityManager.killBackgroundProcesses(String.valueOf(info.pid));
activityManager.killBackgroundProcesses(String.valueOf(info.processName));

然后

Intent i = new Intent();
i.setComponent(new ComponentName(ProcessName,   ProcessName+".Main"));
context.stopService(i);

有人能够回答这个问题而不是告诉我它不应该被做或询问我为什么首先想要这样做吗?请提供一个代码示例或有意义的东西。

1个回答

4

您所说的完全是可能的。只需获取ActivityManager系统服务,然后使用.restartPackage()(已弃用)或.killBackgroundProcesses()。

ActivityManager activityManager = (ActivityManager) context.getSystemService("activity");
activityManager.restartPackage(packageName);

你需要:

以下是必需品:

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

1
从我在问题中发布的代码可以看出,我实际上正在使用activityManager.killBackgroundProcesses()。我也尝试过.restartPackage(),但那也没用。我确实拥有这两个权限。当我尝试杀死它时,我不会收到错误提示,只是应用程序没有被杀死。我使用一个意图启动计算器应用程序,我可以看到它作为一个进程运行,但是当我杀死它时,它仍然保持打开状态,就好像我什么都没有做一样。即使我尝试杀死所有进程,它也只会杀死我的应用程序进程。好像我没有操作系统级别的权限来杀死其他应用程序。 - Luke
4
好的,我终于让这个工作了!注意:当我把计算器放在可见位置时,即使你杀死进程,Android也不会移除活跃视图。 如果我先显示桌面,然后才退出应用程序,就能解决这个问题。完美的测试是 Pandora 应用程序。通过这个应用程序,即使它不可见,你仍然可以听音乐。当我在它可见时将其关闭,似乎并没有发生什么事情。但如果我先显示桌面,然后再关闭它,音乐就会停止播放。 - Luke
@luke:我一步一步地跟着你的路径走。+1 不放弃。你能告诉我显示桌面是什么意思吗? - Behnam
@Luke:在社区给予你的所有支持之后,多做一点贡献是公平的。 - Behnam
2
@Campiador 使用以下代码回到主屏幕:Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); this.startActivity(startMain); 这将模拟按下主屏幕按钮,有效地隐藏所有应用程序但仍在运行。 - Pierre
谢谢Pierre :) 你有没有想法如何从“最近应用程序”列表中删除应用程序。(在按软按钮后弹出的列表) - Behnam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接