9
votes

Comment savoir qu'une application va être désinstallée à Android?

Je veux mettre en œuvre quelque chose comme l'application Applock fait.
Si dans ses paramètres, il est défini sur les applications de verrouillage désinstallez / installez, alors lors de la désinstallation de n'importe quelle application (en cliquant avec précision sur la touche Désinstallation ), un écran de verrouillage demande un mot de passe / motif.
Seulement après avoir entré l'utilisateur de mot de passe est autorisé à désinstaller l'application.

Quelle est cette intention (ou quoi que ce soit, je suppose que c'est une intention, mais pas sûr) que l'on obtienne quand bouton de désinstallation est cliqué?

je ne veux pas Pour que l'administrateur de l'appareil informatique, l'application que j'ai mentionnée nécessite d'être admin de l'appareil.
S'ils peuvent le faire, il y a une manière. S'il vous plaît aider.


0 commentaires

6 Réponses :


0
votes

Faites-le un administrateur de périphérique à la place. Cela bloquera automatiquement l'utilisateur de le désinstaller. Si l'utilisateur tente de le désactiver dans la liste Sécurité> Device Administrator afin de la désinstaller, votre application peut ensuite demander le mot de passe.


2 commentaires

Mais les applications sont en mesure de faire le travail requis, même sans le faire admin. Comment est-ce possible. Y a-t-il un peu de hack, une réflexion utilisée pour un code non exposé d'Android ??


Tout autre moyen est un hackjob qui implique de détecter lorsque d'autres activités sont lancées. Il y aura toujours un retard ou un scintillement de l'écran.



0
votes

Vous pouvez intercepter l'intention de la désinstallation de votre application. Il suffit de mettre le code suivant dans votre fichier manifeste: xxx

Après cela, vous pouvez en quelque sorte traiter que votre application va être supprimée et appeler le désinstallation du gestionnaire de packages.


5 commentaires

@Jaguar: Il est indiqué que les autorisations que vous avez mentionnées sont disponibles uniquement pour les applications système. Maintenant, comment faire ma application comme une application système ???


@akkilis essayez de nettoyer le projet


Quoi ensuite ?? Je ne suis pas capable de comprendre la prochaine étape. Je ne reçois aucune notification que mon application sera supprimée.


Dans les journaux, je peux voir cette exception: E / InstitutionAppDetails (21184): Exception lors de la récupération du package: COM.Example.Appuninstall


De plus, il est imprimé: w / contextimlpl (21353): appeler une méthode dans le processus système sans utilisateur qualifié: android.app.contextimpl.startservice: 1352 android.content.contextwrapper.startservice: 450 android.content.contextwrapper.startservice : 450 com.android.keychain.keychainBroadcastreceiver.onreceive: 12 Android.App.ActivityThread.HandlerEvent: 2376



0
votes

Essayez d'attraper l'intention de l'intention de la diffusion de diffusion et de tirer votre activité d'avertissement de l'activité ou de traiter ce que vous voulez continuer.

"android.intent.action.uninstall_package"

Cette intention ne sera ni donnée ni diffusée à la même application qui est sur le point de se désinstaller


1 commentaires

Son travail mais uniquement sur des appareils pré-Is. La raison étant depuis des ICS, vous pouvez définir Setpackage (package requis) à l'intention que vous diffusez. Par conséquent, je ne l'obtiens pas sur des appareils ICS.



0
votes

On dirait que cela a traversé beaucoup de changements. La diffusion par défaut de package_removed ne fonctionne pas comme prévu. Je suis tombé sur cette discussion, ne l'a pas réellement impliqué, mais les gens disent que cela a fonctionné pour eux. Donnez cela un essai

https://groups.google.com / Forum /? Fromgroups = #! Topic / Android-développeurs / AX5-FMBDPR8


0 commentaires

2
votes

J'ai trouvé un moyen.

  1. Lorsque vous allez à Paramètres -> gérer les applications -> Cliquez sur n'importe quelle application . de
    Vous obtenez une diffusion avec nom du paquet dans Extras.

  2. Lorsque vous cliquez sur le bouton Désinstaller sur cet écran, Une activité est ouverte toujours Name com.android.uninstaller.unistallerActivité .

    La solution à ce problème est donc une manière combinée de 1 et 2 étapes mentionnées ci-dessus.

    Lorsque vous obtenez l'intention mentionnée dans la première étape et que les extras contiennent le nom du package de votre application Démarrez un observateur d'activité à l'aide de Packagemanager par lequel vous obtenez la plus grande activité la plus visible et son package. < BR> Donc, maintenant si une activité de désinstallation est lancée, vous pouvez être sûr que l'utilisateur souhaite désinstaller votre application.

    là après que vous puissiez faire une action nécessaire pour l'empêcher de le faire.


1 commentaires

Ma solution mentionnée ci-dessus échoue sur les périphériques qui fournissent la fonctionnalité de désinstaller l'application du tiroir de l'application lui-même. La solution mentionnée ci-dessus fonctionne bien lorsque l'on essaie de désinstaller l'application de Paramètres -> Gérer les applications, puis désinstallez.



0
votes

Essayez ce code

Essayez d'obtenir l'activité supérieure dans la tâche via ActivityManager et vérifiez s'il s'agit de l'activité de désinstallation. P>

 ComponentName topActivity = mActivityManager.getRunningTasks(1).get(0).topActivity;
String packageName = topActivity.getPackageName();
String className = topActivity.getClassName();
Log.v(TAG, "packageName" + packageName);
Log.v(TAG, "className" + className);

if ("com.android.packageinstaller".equals(packageName)
    && "com.android.packageinstaller.UninstallerActivity".equals(className)) {
//Do anything you want here
}


0 commentaires