-2

Androidで、あるアプリケーションのデータを別のアプリケーションからクリアまたは削除できますか. それが不可能な場合は、内部メモリ内のフォルダーに移動し、そのフォルダーをプログラムで削除するなど、これを行うためのトリッキーな方法を提案してください。

ありがとう。

4

3 に答える 3

1

簡単な答え、

Android は、これができないように設計されています。

ただし、ルート アクセスを使用すると、実際には他のアプリケーションからフォルダーを削除できます。

パッケージは異なるが署名が同じである 2 つのアプリケーションが、実際には互いのプライベート フォルダにアクセスできると思います。または、よくわかりませんが、マニフェスト ファイルに何らかの宣言を追加して、他の (フレンド) アプリがプライベート フォルダーにアクセスできるようにすることができると思います。しかし、私はそれを検索する必要があるかどうかわかりません。

検索後に編集:

android:sharedUserId同じ署名を持つアプリは、android:sharedUserLabelお互いのプライベート ファイルにアクセスできます。

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

同じユーザー ID を持つ 2 つの 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;
}

クラスは元のIPackageDataObserverAndroid ソースからコピーし、プロジェクトのソース フォルダーの 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

質問はあまり明確ではありません。

あなたのアプリが他の誰かのアプリからデータを削除するということですか? そこでの答えは「場合による」です。まず、データが SD カードにある場合は、アクセスして削除することができます。データがアプリのプライベート データ領域にある場合、電話がルート化されていない限り、それを行うことはできません。

問題のアプリが両方ともあなたによって作成されたものである場合、答えはイエスです。可能です。各アプリのマニフェスト ファイルでプロパティを使用し、android:sharedUserIdそれらを同じにして、同じキーで両方のアプリに署名する必要があります。これにより、アプリは互いのデータにアクセスできるようになります。

あなたが話しているデータがデバイスのSDカードにある場合、はいできます。内部ストレージにある場合は、いいえ (両方のアプリを作成し、

于 2012-10-19T12:46:44.377 に答える
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 に答える