killBackgroundProcesses不工作

时间:2013-10-26 07:20:46

标签: android

首先,我在StackOverflow上发现了一些类似的问题,但没有一个答案解决了我的问题。我也用谷歌搜索了所有前30个结果。

所以我正在编写一个服务,它将检查每个前台运行的内容,比如20秒。如果前台应用程序在黑名单中,那么我将弹出一个对话框Activity来说“当前应用程序需要停止”,然后当用户按下该对话框的OK时,该应用程序将通过以下方法停止:

private void killApp(String packageName) {
    ActivityManager am = (ActivityManager)getApplicationContext().getSystemService(ACTIVITY_SERVICE);
    Log.d(TAG, "Trying to kill app " + packageName);
    am.killBackgroundProcesses(packageName);
}

但是,在我的测试中,应用程序根本没有停止。当对话框关闭时,前台应用程序仍然存在,与弹出对话框之前的状态完全相同。我相信我拥有正确的API级别以及必要的权限:

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="18" />

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

我真的被困住,任何帮助都将不胜感激!

3 个答案:

答案 0 :(得分:5)

/ Android在屏幕上显示即活动视图时不会终止应用程序或进程。 所以切换到主屏幕,然后杀死你想要的应用程序或进程 /

    public void KillApplication(String KillPackage)
{
    ActivityManager am = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);    

    Intent startMain = new Intent(Intent.ACTION_MAIN); 
    startMain.addCategory(Intent.CATEGORY_HOME); 
    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    this.startActivity(startMain);



    am.killBackgroundProcesses(KillPackage);
    Toast.makeText(getBaseContext(),"Process Killed : " + KillPackage  ,Toast.LENGTH_LONG).show();       
}

答案 1 :(得分:2)

您可以执行以下操作:

首先,在android:sharedUserId="android.uid.system"的{​​{1}}标记内添加manifest,您的清单文件现在应该如下所示:

AnfroidManifest.xml

其次,声明<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication" android:sharedUserId="android.uid.system"> ... 权限。此步骤使您的清单文件看起来像:

FORCE_STOP_PACKAGES

第三,对于你想要停止的套餐,请执行:

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

只需将final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); am.forceStopPackage(PACKAGE_NAME); 替换为您的包裹名称。

如果您使用Eclipse,只需忽略PACKAGE_NAME中的任何lint错误。

您需要将apk放入系统目录以获得适当的权限。

答案 2 :(得分:0)

您必须使您的应用具有系统权限,即系统应用,或者您可以将手机设为root,以便您的应用可以以root用户身份杀死其他应用。