在android中删除其他应用程序的数据

时间:2012-10-19 12:38:02

标签: android

我们可以从android中的另一个应用程序清除或删除一个应用程序的数据。如果不可能,你可以建议任何棘手的方法,如去内部存储器中的文件夹并以编程方式删除该文件夹。

感谢。

3 个答案:

答案 0 :(得分:1)

简单回答,

Android的设计应该是不可能的。

但是当使用root访问权限时,您实际上可以从其他应用程序中删除文件夹。

我相信如果两个应用程序具有不同的包,但具有相同的签名,实际上可以访问彼此的私有文件夹。或者我不确定,我相信你可以为你的清单文件添加某种声明,允许其他(朋友)应用程序访问你的私人文件夹。但我不确定我应该搜索它。

搜索后修改:

具有相同android:sharedUserIdandroid: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(除非您创建了两个应用程序并使用了

相关问题