首先,我在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" />
我真的被困住,任何帮助都将不胜感激!
答案 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用户身份杀死其他应用。