Comment puis-je préciser le schéma partie spécifique dans une étiquette de données pour un filtre intention?

StackOverflow https://stackoverflow.com/questions/2193716

Question

Je veux mettre en place un BroadcastReceiver pour gérer PACKAGE_REPLACED, mais je veux seulement être informé de mon colis est remplacé. Il fonctionne très bien si je spécifie une étiquette de données avec scheme = « package » mais j'averti quand une application est réinstallé ou mis à niveau. Je ne peux pas comprendre comment je suis censé indiquer le nom du package qui est dans le schéma partie spécifique - qui est, quand mon BroadcastReceiver obtient l'intention dans onRecieve (), si je fais intent.getData () getSchemeSpecificPart (. ), qui est le nom du package, mais est-il possible que je puisse filtrer seulement dans mon intention filtre?

Était-ce utile?

La solution

simple serait d'accepter toutes les intentions de diffusion avec le système de package comme vous le dites, mais faites le filtrage basé sur les extras Intent qui sont envoyés avec les actions de PACKAGE_*.

Si le nom du package dans le Intent ne correspond pas à la vôtre, tout simplement l'ignorer.

Autres conseils

Tel qu'il est utilisé dans Google Search App:

<intent-filter>
  <action android:name="android.intent.action.PACKAGE_REPLACED" /> 
  <data android:scheme="package" android:path="com.google.android.googlequicksearchbox" /> 
</intent-filter>

Mais d'après mon rude épreuve, cela peut encore attraper un paquet mis à jour, ce qui rend le « android: chemin ». Partie en fait inutile

Pour Android 3.1+, vous pouvez utiliser cette nouvelle action pour répondre uniquement lorsque votre package mis à jour:

<intent-filter>
  <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> 
</intent-filter>

Si vous devez soutenir revenir à Android 2.x, une meilleure pratique est de déclarer 2 récepteurs séparés pour PACKAGE_REPLACED et MY_PACKAGE_REPLACED. Puis lors de la première course, vérifiez l'exécution version Android et désactiver l'ancien si la version est 3.1 +.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top