24

私が作成しているAndroidアプリでは、デバイス上のすべてのアプリのキャッシュをプログラムでクリアできるようにしたいと考えています。これは以前にも何度も尋ねられてきました: プログラムでアプリのキャッシュをクリアしますか? Androidアプリのキャッシュをクリアする方法を反映する 別のアプリケーションのキャッシュをクリアする と、rootなしでは不可能だと誰もが言っています。

ただし、これは明らかにそうではありません。アプリのAppCacheCleaner、History Eraser、1Tap Cleaner、Easy History Cleaner、およびGoogle Playの他の無数の同様のアプリ(すべてrootを必要としない)を見ると、すべてがこれを実行できることがわかります。したがって、それは可能ですが、これを行う方法の公開例を見つけることができません。

誰かがそれらのアプリのすべてが何をしているのか知っていますか?

ありがとう

4

2 に答える 2

34

これを行う必要のない方法は次のIPackageDataObserver.aidlとおりです。

PackageManager  pm = getPackageManager();
// Get all methods on the PackageManager
Method[] methods = pm.getClass().getDeclaredMethods();
for (Method m : methods) {
    if (m.getName().equals("freeStorage")) {
        // Found the method I want to use
        try {
            long desiredFreeStorage = 8 * 1024 * 1024 * 1024; // Request for 8GB of free space
            m.invoke(pm, desiredFreeStorage , null);
        } catch (Exception e) {
            // Method invocation failed. Could be a permission problem
        }
        break;
    }
}

マニフェストにこれを含める必要があります。

<uses-permission android:name="android.permission.CLEAR_APP_CACHE"/>

これは、Androidが8GBの空き容量があるように十分なキャッシュファイルをクリアすることを要求します。この数値を十分に高く設定すると、目的を達成する必要があります(Androidはキャッシュ内のすべてのファイルを削除します)。

これが機能する方法は、AndroidがすべてのアプリケーションのキャッシュディレクトリにあるすべてのファイルのLRU(最も最近使用されていない)リストを保持することです。呼び出すfreeStorage()と、キャッシュファイルに使用可能なストレージの量(この場合は8GB)を確認します。そうでない場合は、最も古いファイルを最初に削除することにより、アプリケーションのキャッシュディレクトリからファイルの削除を開始します。削除するファイルがなくなるか、要求したストレージの量(この場合は8GB)が解放されるまで、ファイルの削除が続行されます。

于 2013-01-24T19:25:51.300 に答える
4

この (freeStorageAndNotify)メソッドを使用すると、すべてのアプリのデータをクリアできます。Javaリフレクションを使用してこのメ​​ソッドにアクセスする必要があります。そのためにはIPackageDataObserver.aidlが必要になります。また、キャッシュを削除するためのマニフェストファイルの権限が必要です

于 2013-01-24T18:13:14.543 に答える