2013-10-26 397 views
5

首先,我在StackOverflow上发现了一些类似的问题,但没有任何答案解决了我的问题。我也GOOGLE了它,并阅读所有前30名的结果。killBackgroundProcesses无法正常工作

所以我写一个服务,将检查什么在前台运行的每一个,说,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" /> 

我真的被卡住了,任何帮助将不胜感激!当在屏幕上即活性视图中显示

+0

有没有运气? 你可能还需要检查这个... http://stackoverflow.com/questions/7195167/automate-closing-of-applications-in-android – Behnam

+0

@Campiador没有运气。现在看来,你根本无法在android系统上做类似的事情。 – user690421

回答

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

你可以做到以下几点:

首先,在AnfroidManifest.xml添加android:sharedUserId="android.uid.system"manifest标签内,你的清单文件应该看看现在这样:

<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放在系统目录中才能获得适当的权限。

+1

你将不得不签署你的apk作为系统应用程序 - > http://stackoverflow.com/questions/3635101/how-to-sign-android-app-with-system-signature –

0

你必须让你的应用程序具有系统权限,也就是系统的应用程序,或者你可以用root您的手机,使您的应用程序可以杀死其他应用程序的根用户。