これを行う必要のない方法は次の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)が解放されるまで、ファイルの削除が続行されます。