-2

我们可以从android中的另一个应用程序中清除或删除一个应用程序的数据吗?如果不可能,请您建议任何棘手的方法来执行此操作,例如转到内部存储器中的文件夹并以编程方式删除该文件夹。

谢谢。

4

3 回答 3

1

简单的回答,

Android 被设计成这是不可能的。

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

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

搜索后编辑:

具有相同android:sharedUserIdandroid:sharedUserLabel签名的应用程序可以访问彼此的私人文件。

http://developer.android.com/guide/topics/manifest/manifest-element.html#uid

两个具有相同用户 ID 的 Android 应用程序

编辑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 上找到很多关于反射方法和东西的问题。

我不知道这是否有效,但这是我能想到的唯一方法。

罗尔夫

于 2012-10-19T12:44:37.277 回答
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
);

按照这里的方法

于 2012-10-19T12:45:28.587 回答
0

问题不是很清楚。

你的意思是你的应用程序会从其他人的应用程序中删除数据吗?答案是“视情况而定”。首先,如果数据在 SD 卡上,您可以访问并删除它。如果数据在应用程序的私有数据区域中,那么除非您的手机已植根,否则您无法这样做。

如果有问题的应用程序都是您制作的,答案是肯定的,有可能。您必须android:sharedUserId在每个应用程序的清单文件中使用该属性,使它们相同并使用相同的密钥对两个应用程序进行签名。这将使应用程序可以访问彼此的数据。

如果您所说的数据在设备 SD 卡上,是的,您可以。如果它在内部存储中,则没有(除非您创建了两个应用程序并使用了

于 2012-10-19T12:46:44.377 回答