6

首先,我在 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" />

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

4

3 回答 3

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();       
}
于 2014-04-08T14:32:53.353 回答
2

您可以执行以下操作:

首先,android:sharedUserId="android.uid.system"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);

只需替换PACKAGE_NAME为您的包名称即可。

如果您使用 Eclipse,只需忽略Preferences > Android > Lint Error Checking.

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

于 2014-04-25T06:48:46.823 回答
0

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

于 2016-03-24T03:47:14.620 回答