0

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.

+1

comment vous enregistrez et désinscrivez récepteur de diffusion? pouvez-vous montrer que le code –

+1

pouvez-vous également coller le code de l'endroit où vous avez enregistré MyBroadcastReceiver dans votre service? –

+0

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! –

Répondre

0

Le problème ici n'était pas l'ajout de la ligne myIntentFilter.addAction(getString(R.string.broadcast_id)); lors de l'enregistrement du BroadcastReceiver.

Il a été résolu après l'ajout de la ligne.

Merci à Jitesh Mohite et Hasif Seyd pour m'aider à trouver cette erreur petite mais cruciale.