【问题标题】:killBackgroundProcesses no workingkillBackgroundProcesses 没有工作
【发布时间】:2013-10-26 07:20:45
【问题描述】:

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

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

【问题讨论】:

标签: android


【解决方案1】:

/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();       
}

【讨论】:

  • 这在我的情况下不起作用。它不会杀死我通过包名提供的后台应用程序
【解决方案2】:

您可以执行以下操作:

首先,在AnfroidManifest.xmlmanifest 标签内添加android:sharedUserId="android.uid.system",您的清单文件现在应该如下所示:

<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 &gt; Android &gt; Lint Error Checking 中的任何 lint 错误。

你需要把apk放到系统目录下才能获得相应的权限。

【讨论】:

【解决方案3】:

你必须让你的应用拥有系统权限,即系统应用,或者你可以root你的手机,这样你的应用就可以以root用户杀死其他应用。

【讨论】:

    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2012-02-17
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多