我正在开发一种可以杀死选定应用程序并清除所有数据的工具。有点模拟这个 我只有包名可用。
问问题
3204 次
2 回答
2
我不确定它是否会起作用,但您可以做的是使用您拥有的包名称获取应用程序的进程 ID,然后killProcess()
以进程 ID 作为参数调用方法。
EDIT1:-好的..忘记上面写的内容..我尝试了以下代码,它似乎对我有用。
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses(appProcessName);
您需要android.permission.KILL_BACKGROUND_PROCESSES
在您的应用程序清单中指定权限,并且您是黄金人。
EDIT2:-以下代码清除应用程序数据。但是有一个问题是它无法清除其他应用程序的数据,因为每个安卓应用程序都运行在一个沙盒中,这会屏蔽它们的数据,使其不被从其范围之外访问。
public void clearApplicationData(String packageName) {
File cache = getCacheDir();
File appDir1 = new File(cache.getParent()).getParentFile();
File appDir = new File(appDir1.getAbsolutePath() + "/" + packageName);
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));
Toast.makeText(this, "App Data Deleted", Toast.LENGTH_LONG)
.show();
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
可以通过使用Process
类并chmod
通过它执行命令来更改文件的权限,但是您需要再次作为该包的外壳运行,这需要在Android-Manifest
文件中将应用程序设置为可调试。
因此,即使不是不可能,清除其他应用程序的数据也很困难。
于 2013-11-07T08:34:42.203 回答
0
在我看来,这似乎是极不可能的。Android 不允许您杀死(或清除数据)另一个应用程序。
这个链接指定了一个方法 killBackgroundProcess( String ),但是内核不会杀死它,除非它是你自己的包名。
于 2013-11-07T08:15:27.760 回答