2016-09-15 6 views
0

У меня есть BroadcastReceiver, который не получает трансляции.Xamarin broadcast receiver не принимает

[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 см. Функцию отправки в уже включенном коде – trampster

+0

@SushiHangover Это другой вопрос о том, как это сделать из другого проекта. У меня есть только один проект. А также ответы не помогают. – trampster

ответ

0

У меня это получилось: Проблема была связана с типом данных. Цель была отправлена ​​с помощью «text/plain», а IntentFilter для получения не совпал.

Решение добавить DataMimeType = «текст/обычный» намерению фильтр следующим образом:

[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"); 
    } 
} 
Смежные вопросы