2011-01-05 3 views
4

Je souhaite écrire un utilitaire dans lequel l'utilisateur peut sélectionner un ensemble d'applications installées et effacer leurs caches de données, comme vous pouvez le faire manuellement en utilisant l'écran intégré Settings-> Applictions avec le bouton "Clear cache".Effacer le cache de l'application par programme?

Comment puis-je accéder aux données mises en cache de chaque application et effacer ces caches par programme?

Répondre

2

Les applications SDK ordinaires n'ont pas le droit d'accéder, et encore moins de modifier, les caches d'autres applications, pas plus qu'elles n'ont le droit de pirater vos fichiers.

Cela peut être possible sur les téléphones enracinés avec votre application exécutée en tant que root, auquel cas vous devrez construire manuellement les chemins en fonction des noms de paquets des applications.

+0

OK, merci. J'ai vu des utilitaires qui vous aident à gérer votre cache, mais ils doivent nécessiter un accès root. Existe-t-il un moyen de répertorier au moins l'espace occupé par le cache de chaque application? Y at-il un moyen de passer à l'activité des paramètres avec le bouton "Effacer le cache" pour une application spécifique? – robosheep

+0

@robosheep: "Existe-t-il un moyen de répertorier au minimum l'espace occupé par le cache de chaque application?" - Pas que je sache, mais je ne suis pas allé exactement le chercher. "Y at-il un moyen de passer à l'activité des paramètres avec le bouton" Effacer le cache "pour une application spécifique?" - essayez http://developer.android.com/reference/android/provider/Settings.html # ACTION_APPLICATION_DETAILS_SETTINGS (remarque: nouveau sur Android 2.3) – CommonsWare

6

La réponse donnée ici est fausse, il y a des applications du marché qui ont une fonction de mise en cache de toutes les applications. En outre ce qui suit est dans la documentation:

public static final String CLEAR_APP_CACHE 

depuis: API Niveau 1 Android Permet à une application pour effacer les caches de toutes les applications installées sur l'appareil. Valeur constante:

android.permission.CLEAR_APP_CACHE 

Notez la « toute partie des applications installées », et le fait que vous n'avez pas besoin accès root ou autorisations spéciales au-delà d'une autorisation d'utilisateur standard.

Je poste ici parce que j'ai besoin d'un livrable pour effacer toutes les caches d'applications toutes les 24 heures sur un téléphone démo en magasin et j'essaie de comprendre comment l'utiliser correctement. Je sais qu'une partie de la solution obtient cette permission, je sais aussi comment trouver toutes les applications installées sur l'appareil, et je travaille à pouvoir réellement supprimer le cache. Mon problème est d'autres caches d'applications lues comme ne contenant aucun fichier (malgré le fait d'avoir du contenu), je suspecte parce que je n'ai pas d'accès en lecture pour faire la liste des appels de fichiers.

+0

que @tim peut-il afficher un code pour effacer le cache pour toutes les applications? Et peut-on obtenir la quantité de mémoire libérée? – AkashG

0

Vous devriez avoir cette autorisation dans votre manifeste:

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

Après cela, vous pouvez utiliser PackageManager pour effacer le cache de tous les programmes:

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; 
    } 
} 

Cette demande que les fichiers de cache Android suffisamment clair pour que il y a 8 Go gratuit. Si vous définissez ce nombre assez haut, vous devriez atteindre ce que vous voulez (que Android supprimera tous les fichiers dans le cache). Lorsque vous appelez freeStorage() il vérifie si la quantité de stockage (dans ce cas 8 Go) est disponible pour les fichiers de cache. Si ce n'est pas le cas, il commence à supprimer les fichiers des répertoires de cache de l'application en supprimant les fichiers les plus anciens en premier. Il continue à supprimer des fichiers jusqu'à ce qu'il n'y ait plus de fichiers à supprimer, ou il a libéré la quantité de stockage que vous avez demandé (dans ce cas, 8 Go).