我们可以从android中的另一个应用程序清除或删除一个应用程序的数据。如果不可能,你可以建议任何棘手的方法,如去内部存储器中的文件夹并以编程方式删除该文件夹。
感谢。
答案 0 :(得分:1)
简单回答,
Android的设计应该是不可能的。
但是当使用root访问权限时,您实际上可以从其他应用程序中删除文件夹。
我相信如果两个应用程序具有不同的包,但具有相同的签名,实际上可以访问彼此的私有文件夹。或者我不确定,我相信你可以为你的清单文件添加某种声明,允许其他(朋友)应用程序访问你的私人文件夹。但我不确定我应该搜索它。
搜索后修改:
具有相同android:sharedUserId
和android:sharedUserLabel
和签名的应用可以访问彼此的私人文件。
http://developer.android.com/guide/topics/manifest/manifest-element.html#uid
Two Android applications with the same user ID
编辑2:
android API中有一些私有方法,我可以用它来清除应用数据。我不确定,但如果您在清单文件中使用正确的权限反映这些方法,则可以清除应用程序数据,但我不是百分百肯定。
一些小例子代码:
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源代码复制,并作为新类添加到项目的源文件夹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上找到很多关于反映方法和内容的问题。
我不知道这是否有效,但这是我能想到的唯一方法。
罗尔夫
答案 1 :(得分:0)
如果存储在数据库中,您可以使用内容提供程序通过以下方法删除数据
mRowsDeleted = getContentResolver().delete(
UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
mSelectionClause // the column to select on
mSelectionArgs // the value to compare to
);
按照Here
方法进行操作答案 2 :(得分:0)
问题不是很清楚。
你的意思是你的应用会从别人的应用中删除数据吗?答案是“它取决于”。首先,如果数据在SD卡上,您可以访问并删除它。如果数据位于应用专用数据区域,则除非您的手机已植根,否则无法执行此操作。
如果相关的应用程序都是由您制作的,答案是肯定的,这是可能的。您必须在每个应用的清单文件中使用android:sharedUserId
属性,使它们相同并使用相同的密钥对两个应用进行签名。这将使应用程序可以访问彼此的数据。
如果您所说的数据在设备SD卡上,是的,您可以。如果它在内部存储中,则为no(除非您创建了两个应用程序并使用了