我们可以从android中的另一个应用程序中清除或删除一个应用程序的数据吗?如果不可能,请您建议任何棘手的方法来执行此操作,例如转到内部存储器中的文件夹并以编程方式删除该文件夹。
谢谢。
我们可以从android中的另一个应用程序中清除或删除一个应用程序的数据吗?如果不可能,请您建议任何棘手的方法来执行此操作,例如转到内部存储器中的文件夹并以编程方式删除该文件夹。
谢谢。
简单的回答,
Android 被设计成这是不可能的。
但是当使用 root 访问权限时,您实际上可以从其他应用程序中删除文件夹。
我相信如果两个应用程序具有不同的包,但具有相同的签名,实际上可以访问彼此的私人文件夹。或者我不确定,我相信您可以在清单文件中添加某种声明,允许其他(朋友)应用程序访问您的私人文件夹。但我不确定我应该搜索它。
搜索后编辑:
具有相同android:sharedUserId
和android:sharedUserLabel
签名的应用程序可以访问彼此的私人文件。
http://developer.android.com/guide/topics/manifest/manifest-element.html#uid
编辑2:
android API中有一些私有方法,我认为可以用来清除应用程序数据。我不确定,但是如果您在清单文件中反映这些具有正确权限的方法,则可以清除应用程序数据,但我不能 100% 确定。
一些小示例代码:
Method clearApplicationUserData = getReflectedMethod("clearApplicationUserData", String.class, IPackageDataObserver.class);
而我使用的方法得到它的反映......
private Method getReflectedMethod(String methodname, Class<?>... args) {
Method temp = null;
try {
temp = pm.getClass().getMethod(methodname, args);
} catch (SecurityException e) {
return null;
} catch (NoSuchMethodException e) {
return null;
}
return temp;
}
该类IPackageDataObserver
应从原始 android 源代码中复制,并作为新类添加到项目的源文件夹中 package 下android.content.pm
。
当你想清除用户数据时,我认为你应该调用这样的方法:
public void clearApplicationUserData(String packageName) {
if (clearApplicationUserData != null) {
try {
clearApplicationUserData.invoke(pm, packageName, data_helper);
} catch (IllegalArgumentException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
}
}
data_helper 是扩展该类的任何IPackageDataObserver.Stub
类。
你可以在 stackoverflow 上找到很多关于反射方法和东西的问题。
我不知道这是否有效,但这是我能想到的唯一方法。
罗尔夫
如果它存储在数据库中,您可以通过以下方法使用内容提供程序删除数据
mRowsDeleted = getContentResolver().delete(
UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
mSelectionClause // the column to select on
mSelectionArgs // the value to compare to
);
按照这里的方法
问题不是很清楚。
你的意思是你的应用程序会从其他人的应用程序中删除数据吗?答案是“视情况而定”。首先,如果数据在 SD 卡上,您可以访问并删除它。如果数据在应用程序的私有数据区域中,那么除非您的手机已植根,否则您无法这样做。
如果有问题的应用程序都是您制作的,答案是肯定的,有可能。您必须android:sharedUserId
在每个应用程序的清单文件中使用该属性,使它们相同并使用相同的密钥对两个应用程序进行签名。这将使应用程序可以访问彼此的数据。
如果您所说的数据在设备 SD 卡上,是的,您可以。如果它在内部存储中,则没有(除非您创建了两个应用程序并使用了