2010-06-01 7 views
1

J'ai une fonctionnalité de suppression d'application dans l'une de mes applications, mais jusqu'à API 7 j'ai toujours travaillé avec restartPackage (String PackageName); mais comme l'API 8 est obsolète, j'ai essayé killBackgroundProcesses (String PackageName); mais cela n'a pas fonctionné non plus.Tuer une application/un package dans API 8 (Froyo)

Les deux sont des méthodes sont dans la classe ActivityManager

J'espère que quelqu'un peut me aider.

+1

Avez-vous la permission KILL_BACKGROUND_PROCESSES dans votre manifeste? – HXCaine

+0

Oui je l'ai et je ne reçois aussi pas une erreur que l'autorisation est manquante. –

Répondre

1

J'ai, ou plutôt eu, la même fonctionnalité dans une de mes applications ... De toutes les recherches que j'ai effectuées cette fonctionnalité n'est plus possible.

L'état SDK Docs ceci au sujet de la raison pour laquelle l'autorisation de restartPackages a été dépréciée:

« Ceci est maintenant juste un wrapper pour killBackgroundProcesses (String), le comportement précédent n'est ici plus disponible pour les applications, car elle leur permet de briser d'autres applications en supprimant leurs alarmes, en arrêtant leurs services, etc.

Cela semble impliquer que tout ce qui est visible pour l'utilisateur ne peut plus être fermé par les applications SDK. Je suis très déçu par cette décision et si quelqu'un connaît une solution de contournement, je suis également intéressé par la réponse. Je comprends qu'il est possible de "casser" d'autres applications avec cette fonctionnalité activée, mais je pensais que c'est ce que le système d'autorisation est pour. Les utilisateurs connaissent à l'avance les autorisations accordées par l'application et savent ainsi quelles sont les conséquences possibles.

Je ne sais pas combien de personnes sont venues me demander de réparer le fait qu'elles ne peuvent plus fermer les applications dans FroYo via mon application.


EDIT:

La meilleure chose que j'ai pu trouver est d'ajouter la capacité de fournir un à la page Informations sur l'application du système go solution d'un clic pour une application donnée. Voici quelques exemples de code que j'utilise dans mon application:

public Intent getManagePkgIntent(String pkgName) 
    { 
     int osVersion = AppMode.getAndroidVersion(); 

     Intent intent = new Intent(); 
     if (osVersion > AppMode.FROYO_SDK_VERSION) 
     { 
      //Settings.ACTION_APPLICATION_DETAILS_SETTINGS - THIS CONSTANT ISN'T AVAILABLE UNTIL COMPILING WITH 2.3 
      intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); 
      intent.setData(Uri.fromParts("package", pkgName, null)); 
      return intent; 
     } 
     else //FROYO And Older... 
     { 
      intent.setAction(Intent.ACTION_VIEW); 
      intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); 

      String pkgExtra = (osVersion != AppMode.FROYO_SDK_VERSION) ? "com.android.settings.ApplicationPkgName" : "pkg"; 
      intent.putExtra(pkgExtra, pkgName); 
     } 

     if (m_pkgMgr.resolveActivity(intent, 0) == null) 
      return null; 

     return intent; 
    } 

AppMode.getAndroidVersion() est juste une méthode statique qui obtient en toute sécurité la version Android OS comme un int (parce que l'application fonctionne également sur 1,5) ..

AppMode.FROYO_SDK_VERSION est juste un entier statique final indiquant le niveau de l'API FroYo.

0

Il y a un article a parlé de ce problème.

Dans android 2.2, il y a toujours le bouton "Force Close" dans le test de l'émulateur. Cela signifie qu'il a encore le moyen de surmonter la fonction "restartpackage" disparue. Mais je ne suis pas sûr que ce soit Public API ou seulement permet au niveau du système d'utiliser. J'espère que la réponse est l'ancienne. :(

link text

+0

J'essaie d'en faire une pratique de rester loin à partir de choses qui ne sont pas API publique ... Je suppose que c'est quelque chose qui nécessite des autorisations au niveau du système.Il existe des applications qui vont fermer d'autres applications, mais elles nécessitent un périphérique enraciné pour que cela fonctionne. – Justin

Questions connexes