android:如何以编程方式基于包名停止应用程序

时间:2014-05-18 14:15:05

标签: android

我想以编程方式停止某个应用。我读过这应该是调用moveTaskToBack(),但我无法想象如何根据像#34; com.adobe.reader"这样的包名来调用它。 。我可以在任务堆栈中找到他持久的任务ID搜索,但我现在不知道该怎么做。

public static void stopPackageProcess(String packageName, Context context) {

    Context mContext = context;

    final ActivityManager am = (ActivityManager) mContext
        .getSystemService(Context.ACTIVITY_SERVICE);

    List<ActivityManager.RecentTaskInfo> mTasks =
        am.getRecentTasks(Integer.MAX_VALUE, ActivityManager.RECENT_IGNORE_UNAVAILABLE);

    for (int i = 0; i < mTasks.size(); i++)
    {
        String name = mTasks.get(i).baseIntent
            .getComponent().getPackageName();

        if(name.equals(packageName)) {
            // TODO: Stop App
            break;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

如果你做对了,你想在后台停止一个应用程序。

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcesses(PACKAGENAME);

这样做。例如 这需要android.permission.KILL_BACKGROUND_PROCESSES权限

答案 1 :(得分:0)

您无法杀死Android中的任何进程。 From the documentation on Process

请注意,尽管此API允许我们根据其PID请求终止任何进程,但内核仍会对您实际可以杀死的PID施加标准限制。通常,这意味着只有运行调用者程序包/应用程序的进程以及该应用程序创建的任何其他进程;共享一个共同UID的软件包也可以杀死彼此的进程。

另请注意,您在清单中请求的权限并不像您认为的那样有效。根据{{​​3}},KILL_BACKGROUND_PROCESS:

允许应用程序调用killBackgroundProcesses(String)。