2016-09-15 110 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"); 
    } 
}