ACTION_MY_PACKAGE_REPLACED pas reçu
Je suis en utilisant ACTION_MY_PACKAGE_REPLACED à recevoir lorsque mon application est mise à jour ou resinstalled.
Mon problème est que l'événement n'est jamais déclenchée (j'ai essayé Eclipse et réel de l'appareil).
C'est ce que je fais:
Manifeste:
<receiver android:name=".MyEventReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
Code:
public class MyEventReceiver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent)
{
if ("android.intent.action.ACTION_MY_PACKAGE_REPLACED".equals(intent.getAction()))
{ //Restart services
}
}
}
Ce code est simple, en vrai j'ai utilisé d'autres événements comme BOOT_COMPLETED et d'autres, et ils travaillent, mais ACTION_MY_PACKAGE_REPLACED.
Merci.
- Vous avez deux problèmes. Votre nom d'action est mal; il ne doit pas inclure le
ACTION_
préfixe. Aussi,MY_PACKAGE_REPLACED
est pour API 12+.
Vous devez vous connecter pour publier un commentaire.
pour une raison quelconque, un google developer (nommé "Dianne Hackborn") pense qu'il est possible de s'inscrire à la PACKAGE_REPLACED intention de l'application actuelle seul (lien ici).
cependant, je ne peux pas trouver un moyen de le faire correctement, j'ai donc fait un compromis: il va utiliser la nouvelle API lorsque disponible.
Malheureusement, je ne peux pas savoir pourquoi il ne peut pas être débogué, mais il fonctionne (vous pouvez écrire dans le journal si vous le souhaitez).
voici le code:
manifeste:
res/values/version_checks.xml
res/values-v12/version_checks.xml
OnUpgradeBroadcastReceiver.java
<receiver android:debuggable="true" android:exported="true" android:name=".OnUpgradeBroadcastReceiver">
<item name="x" type="bool">false</item>
, toujours utilisé le plus court<bool name="x">false</bool>
La accepté de répondre à ne fonctionne plus avec Android Studio 1.0+ car manifeste de la fusion des problèmes, comme on le voit ici. Totalement axé sur android du développeur répondre, j'ai résolu le problème grâce à la mise en œuvre:
AndroidManifest.xml:
/res/values/resources.xml:
/res/values-v12/resources.xml:
UpdateReceiver.java:
android:name
pour deux<receiver>
éléments. Et la question est très clairement décrit dans les questions que j'ai lié. Vous n'avez qu'à copier les 4 fichiers fournis dans votre réponse et de le compiler pour le reproduire.À obtenir des informations de tous les utilisateurs, j'ai pu résoudre mon situation de cette façon.
Tous ont droit, avec peu de points à noter:
Dans le manifeste:
Et code:
Dans ma version Android (2.3 pain d'épice) je n'ai pas été en mesure d'utiliser MY_PACKAGE_REPLACED mais nous avons résolu en utilisant PACKAGE_REPLACED (conseillera de n'importe quelle application a été remplacé), mais de demander si c'est le nôtre avec:
Merci à tous
Je veux juste ajouter que mes deux pence vaut ici, parce que j'ai eu des problèmes pour obtenir que cela fonctionne et déboguer .. je suis en utilisant une Sucette de périphérique:
C'est le code que j'ai utilisé:
Pour le débogage, vous devez vous assurer que vous avez installé la mise à jour sur votre téléphone, via Eclipse de débogage est très bien, et ouvert l'application au moins une fois, alors vous pouvez simplement modifier votre configuration debug:
Je confirme qu'il a travaillé en écrivant un petit fichier de la carte SD
Êtes-vous essayer sur une API>=12 appareil/émulateur? Cette émission ne sera pas envoyé sur des cas antérieurs, comme il est d'API 12. Si vous avez besoin de votre app pour recevoir cette Pré-ICS et le vieux peigne de miel appareils,
essayer:
Simple Manifeste de travail dans toutes les version :
En fait, votre application va commencer à deux fois lorsque vous installez votre apk.
Une fois pour chaque récepteur que vous avez défini.
Lorsque vous êtes à l'Écoute de
android.intent.action.PACKAGE_REPLACED
alors vous devez vérifier que le nom-du-paquet dans leintent.getData()
Noter que
intent.getData()
sera Nulle lorsque c'est à partir deandroid.intent.action.MY_PACKAGE_REPLACED
Je pense à l'aide de l'un d'entre eux est assez.
J'ai rencontré ce problème quand j'étais construction et l'installation de mon application sur Android Studio.
Vous devez ajouter schéma des données à l'intention de filtre comme ci-dessous
ACTION_MY_PACKAGE_REPLACED
estandroid.intent.action.MY_PACKAGE_REPLACED
sansACTION_
partie.