de radiodiffusion de BOOT_COMPLETED intention d'action ne fonctionne pas correctement
J'ai une classe de récepteur à l'écoute sur plusieurs actions, mais il ne peut pas attraper le android.intent.action.BOOT_COMPLETED
action. Ce que je fais de mal? voici mon fichier de manifeste:
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!--<receiver android:name=".OtherReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>-->
<receiver android:name="com.myApp.AppReceiver" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="com.myApp.wifitimer"/>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.myApp" />
</intent-filter>
</receiver>
comme on peut le voir, j'ai ajouté la permission de nouveau à l'intérieur du récepteur et le nom du destinataire obtient le nom complet de la classe comme cette réponse suggère.
ici, c'est le récepteur de radiodiffusion de classe:
@Override
public void onReceive(Context arg0, Intent arg1) {
String action1 = arg1.getAction();
if(action1.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("receiver","action is: boot");
}
if(action1.equals("android.intent.action.PACKAGE_REPLACED")) {
Log.d("receiver","action is: package");
}
}
Quand je lance l'application sur le récepteur capte le android.intent.action.PACKAGE_REPLACED
mais lorsque je redémarre le téléphone, le récepteur ne pas attraper la BOOT_COMPLETED
.
Cependant, quand j'ai fait un commentaire dans le .OtherReceiver
dans le Mainfest fichier, il peut l'attraper!
voici le code de cette classe:
public class OtherReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
String action = arg1.getAction();
if(action.equals(Intent.ACTION_BOOT_COMPLETED)) {
Log.d("new receiver","action is: boot");
}
}
}
tout de même l'un que l'autre. Donc ma question est pourquoi j'ai besoin de définir un récepteur séparé pour les BOOT_COMPLETED
action?
Edit: j'ai aussi essayé d'envoyer de l'action via bad selon cette, et sans aucune autorisation, je pouvais l'attraper avec le AppReceiver classe:
am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n com.blubuk/.AppReciever
OriginalL'auteur HiB | 2013-03-30
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, enlever
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
de votre<receiver>
élément.Seconde, votre
<data>
partie de votre<intent-filter>
est l'application de à tous<action>
éléments à l'intérieur de cette<intent-filter>
, que vous ne souhaitez pas. Il n'y a pas deUri
surACTION_BOOT_COMPLETED
.Cependant, plutôt que de créer un
<receiver>
élément, vous pouvez simplement créer un<intent-filter>
élément original de votre<receiver>
élément. Déplacez votre<action android:name="android.intent.action.BOOT_COMPLETED" />
à la nouvelle<intent-filter>
(et peut-être quecom.myApp.wifitimer
de trop), de sorte qu'ils ne sont pas affectés par la<data>
de votre première<intent-filter>
.OriginalL'auteur CommonsWare