J'ai un Service
d'où j'envoie une émission intent
à un BroadcastReceiver
puis ce récepteur de radiodiffusion renvoie à un BroadcastReceiver
spécifié dans le Service
.OnReceive de BroadcastReceiver() est défaut de recevoir l'émission envoyée par un autre BroadcastReceiver
Voici le code:
private Notification getNotificationAU() {
mBuilder =
new NotificationCompat.Builder(getBaseContext())
.setSmallIcon(R.mipmap.app_icon_1)
.setContentTitle("title")
.setContentText(***);
// for action button
Intent actionIntent = new Intent(getBaseContext(), BroadcastSender.class);
PendingIntent actionPendingIntent = PendingIntent
.getBroadcast(getBaseContext(),
0, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setAutoCancel(true);
mBuilder.addAction(***, "***", actionPendingIntent);
return mBuilder.build();
}
est ici BroadcastSender.class
code:
public class BroadcastSender extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Broadcast Received by BroadcastSender", Toast.LENGTH_SHORT).show();
// send back to your class
Intent newIntent = new Intent();
newIntent.setAction(context.getString(R.string.broadcast_id));
context.sendBroadcast(newIntent);
context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
Toast.makeText(context, "Broadcast sent back.", Toast.LENGTH_SHORT).show();
}
}
deux le Toasts
ci-dessus est d'obtenir montré.
est ici BroadcastReceiver
à l'intérieur du Service
:
public class MyBroadcastReceiver extends BroadcastReceiver {
public MyBroadcastReceiver(){
super();
}
@Override public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "onReceive() in service called", Toast.LENGTH_SHORT).show();
if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id_2))) {
...
...
...
} else if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id))) {
// perform the task
} else {
Toast.makeText(context, "Intent is null.", Toast.LENGTH_SHORT).show();
}
}
}
Voici le strings.xml
:
<string name="broadcast_id">***</string>
est ici AndroidManifest.xml
:
<receiver android:name=".BroadcastSender"/>
Le problème est queMyBroadcastReceiver
ne reçoit aucune diffusion même si les deux ont le même ID de diffusion R.string.broadcast_id
.
Pourquoi ne reçoit-il pas la diffusion envoyée par BroadcastSender.class
?
Faites-le moi savoir s'il vous plaît.
comment vous enregistrez et désinscrivez récepteur de diffusion? pouvez-vous montrer que le code –
pouvez-vous également coller le code de l'endroit où vous avez enregistré MyBroadcastReceiver dans votre service? –
Merci d'avoir découvert cette erreur stupide! J'ai oublié d'ajouter 'myIntentFilter.addAction (getString (R.string.broadcast_id))' lors de l'enregistrement du récepteur de diffusion. Ça fonctionne maintenant! –