2016-09-15 109 views
0

我有一个没有收到任何广播的BroadcastReceiver。Xamarin广播接收器没有收到

[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"); 
    } 
} 

OnReceive方法从来没有命中。我如何在xamarin中正确实现广播接收器?

这里只有一个项目,所以这不是从另一个项目接收意图的问题的重复。

+0

请包括被触发广播的代码。 – matthewrdev

+0

@matthewrdev在已经包含的代码中看到send函数 – trampster

+0

@SushiHangover另外一个问题是关于从一个不同的项目来完成,我只有一个项目。而且答案也没有帮助。 – trampster

回答

0

我得到它的工作: 问题是与数据类型。意图以“text/plain”发送,IntentFilter接收的内容不匹配。

的解决方案是增加DataMimeType =“text/plain的”到意图滤波器如下:

[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"); 
    } 
}