La réception de paquet d'installer et de désinstaller des événements
Je suis en train d'essayer de détecter lorsqu'une nouvelle Application est en cours d'installation, mais seulement si mon application est en cours d'exécution. J'ai réussi à détecter l'installation de l'application en faisant un BroadcastReceiver et de l'activation à l'intérieur du fichier AndroidManifest mais cela permet de déceler, même si mon application est fermée.
C'est pourquoi j'ai besoin d'activer et désactiver manuellement la broadcastreveiver. Pour ce faire, j'ai ce code:
br = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//TODO Auto-generated method stub
Log.i("Enter", "Enters here");
Toast.makeText(context, "App Installed!!!!.", Toast.LENGTH_LONG).show();
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
registerReceiver(br, intentFilter);
Cela devrait faire un toast lorsqu'une nouvelle application est installée. Mais malheureusement il ne fonctionne pas. Il n'entre pas dans la méthode onReceive. Toute aide est appréciée.
- où voulez-vous enregistrer votre récepteur?
- Le reciver est enregistré dans la méthode onCreate de l'activité.
- essayez d'utiliser votre contexte de l'application lors de l'affichage du pain grillé
Vous devez vous connecter pour publier un commentaire.
J'ai essayé d'enregistrer le
BroadcastReceiver
dans le fichier de manifeste ou de code java. Mais ces deux méthodes n'a pas déclenché de laonReceive()
méthode.Après googler ce problème, j'ai trouvé une solution pour les deux méthodes à partir d'un autre Thread dans:
Les Notifications Android App
Dans le fichier manifeste:
Dans du code java:
Cela devrait fonctionner pour vous.
<action android:name="android.intent.action.PACKAGE_REMOVED" />
.intent.getData().toString()
) a reçu, c'est comme cela -package:com.rovio.angrybirds
android.intent.action.PACKAGE_REPLACED
action devrait être fournie. Cette action permet d'écouter les applications d'un paquet de changements donc, nous pouvons remarquer l'icône de l'application et des changements de nom.Juste pour ajouter à la réponse de Huang ci-dessus, voici comment obtenir le nom du package de l'application nouvellement installée:
Autre répond point à l'écoute pour
ACTION_PACKAGE_ADDED
etACTION_PACKAGE_REPLACED
émissions. C'est très bien pour Android 7.1 et inférieur. Sur Android 8.0+, vous ne pouvez pas vous inscrire aux émissions dans le manifeste.Au lieu de cela, vous avez besoin de appeler
getChangedPackages()
àPackageManager
périodiquement, par exemple via une périodiquesJobScheduler
travail. Ce ne sera pas vous donner des résultats en temps réel, mais les résultats en temps réel ne sont plus une option sur Android 8.0+.LocalBroadcastManager
. Mais, selon cette réponseLocalBroadcastManager
est depricated dans la Version 1.1.0. En gros, je veux forcer une mise à jour vers une version plus récente. Soit je viens de tuer l'application, si l'installation est canelled ou je lance l'installation de l'intention à nouveau. Comment pourrais-je le faire (en supporitng 8.0+) aujourd'hui? Merci.onCreate()
, et vous devriez être assez bien couvert -- une boucle ne devrait pas être nécessaire.onCreate()
de chaque activité) plutôt que d'essayer de réagir à l'annulation de l'installateur de package? Pas ce que j'espérais, mais c'est probablement plus facile/mieux que d'utiliserBroadcastReceiver
s ou un mélange de solutions pour les différentes versions d'Android. Merci pour le soutien rapide. J'ai vraiment l'apprécier. Avoir un bon!startActivityForResult
pour démarrer le programme d'installation du Package et de montrer la "mise à jour me crisse"-boîte de dialogue si leresultCode
dans le remplacéonActivityResult
-méthode a étéRESULT_CANCELED
. Je ne sais pas pourquoi je n'ai pas trouvé cette solution beaucoup plus simple avant. N'a pas vraiment de faire beaucoup avec votre réponse ici mais je voulais juste vous laisser savoir. Et peut-être que quelqu'un d'autre se termine à la recherche pour le ici. Merci, de toute façon, me diriger dans la bonne direction.EXTRA_RETURN_RESULT
. Cette approche est très bien pour les occasionnels choses, mais étant donné fabricant de l'appareil de réglages, je ne voudrais pas compter sur le code de résultat, même avecEXTRA_RETURN_RESULT
.EXTRA_RETURN_RESULTS
est en train de faire ici. J'ai fait unputExtra
avec elle avant de commencer mon intention. Mais alors quoi? Est-il censé me donner des infos plus détaillées dansonActivityResult
? Heureusement je n'ai qu'à l'appui de cette un seul appareil. C'est le seul modèle que le client sera en mesure d'obtenir de nous avec l'app. Le seul moins sympa, c'est je n'ai pas l "Installation terminée" écran avec les boutons "Fait" ou "Ouvrir". Mais je suppose que c'est parce que je suis sauver la mise à jour.apk dans la mémoire cache de l'application que je suis à jour. Mais de cette façon je n'ai pas besoin d'obtenir SD autorisation.startActivityForResult()
nécessite la coopération de la part de l'activité en cours de démarrage. "C'est le seul modèle que le client sera en mesure d'obtenir de nous avec l'app" -- oh, eh bien, qui permet de.