2016-09-15 1 views
0

J'ai un BroadcastReceiver qui ne reçoit aucune émission.Le récepteur de diffusion Xamarin ne reçoit pas

[BroadcastReceiver] 
[IntentFilter(new[] { _broadcastId })] 
public class CallBroadcaster : BroadcastReceiver, IAcceptCallService 
{ 
    const string _broadcastId = "headExtension.droid.services.AcceptIndividualCall"; 

    public CallBroadcaster() 
    { 
    } 

    Activity CurrentActivity 
    { 
     get { return Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity; } 
    } 

    public void Send() 
    { 
     var intent = new Intent(_broadcastId); 
     intent.PutExtra(Intent.ExtraText, "Accept"); 
     intent.SetType("text/plain"); 

     CurrentActivity.SendBroadcast(intent); 
    } 

    public override void OnReceive(Context context, Intent intent) 
    { 
     Console.WriteLine("Received"); 
    } 
} 

La méthode OnReceive n'est jamais atteinte. Comment implémenter correctement un récepteur de diffusion dans xamarin.

Il n'y a qu'un seul projet ici, donc ce n'est pas un doublon de la question concernant la réception d'une intention d'un autre projet.

+0

S'il vous plaît inclure le code qui déclenche l'émission. – matthewrdev

+0

@matthewrdev voir la fonction d'envoi dans le code déjà inclus – trampster

+0

@SushiHangover Cette autre question est de le faire à partir d'un projet différent, je n'ai qu'un seul projet. Et aussi les réponses n'aident pas. – trampster

Répondre

0

Je l'ai eu le travail: Le problème était avec le type de données. L'intention a été envoyée avec "text/plain" et le IntentFilter pour la réception ne correspond pas.

La solution est d'ajouter DataMimeType = "text/plain" au filtre intention comme suit:

[BroadcastReceiver] 
[IntentFilter(new[] { _broadcastId }, DataMimeType="text/plain")] 
public class CallBroadcaster : BroadcastReceiver, IAcceptCallService 
{ 
    const string _broadcastId =  "headExtension.droid.services.AcceptIndividualCall"; 

    public CallBroadcaster() 
    { 
    } 

    Activity CurrentActivity 
    { 
     get { return Mvx.Resolve<IMvxAndroidCurrentTopActivity>().Activity; } 
    } 

    public void Send() 
    { 
     var intent = new Intent(_broadcastId); 
     intent.PutExtra(Intent.ExtraText, "Accept"); 
     intent.SetType("text/plain"); 

     CurrentActivity.SendBroadcast(intent); 
    } 

    public override void OnReceive(Context context, Intent intent) 
    { 
     Console.WriteLine("Received"); 
    } 
}