2016-06-02 3 views
0

Кажется, что нет простого способа связаться с пользовательским интерфейсом в GcmListenererService, как я описал в this question.Уведомление Android-интерфейса Xamarin от GcmListenerService

Теперь я спрашиваю, будет ли косвенный способ уведомлять пользовательский интерфейс о входящих сообщениях из GcmListenerService, например, о некоторых локальных уведомлениях. Я попытался связать службу с пользовательским интерфейсом, но GcmListenerService не имеет метода overbidden OnBind.

Вот мой код, я до сих пор мог зарегистрировать информацию о сообщении, что не очень полезно для конечных пользователей. Это отстой, если нет возможности сообщить пользовательскому интерфейсу о push-сообщениях.

[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })] 
class MyGcmListenerService : GcmListenerService 
{ 
    public override void OnMessageReceived(string from, Bundle data) 
    { 
     string msg = data.GetString("message"); 

     Log.Info("GcmLstnrService", "From: " + from); 
     Log.Info("GcmLstnrService", "Msg: " + msg); 
    } 
} 

Btw, это действительно легко и понятно, например. отображать всплывающее окно в приложениях iOS и Win Phone при поступлении push-сообщения, но это действительно сложно реализовать на Android.

ответ

0

Для этого вы можете использовать инструмент обмена сообщениями сторонних разработчиков. TinyMessenger - хороший и простой в использовании для Xamarin. (. Предполагая, что вы используете инъекции зависимостей)

В классе GCMListerner вы можете иметь:

var resolvedHub = container.Resolve<ITinyMessengerHub>(); 

и когда приходит толчок уведомление вы могли бы сделать:

resolvedHub.PublishAsync(new MyMessage()); 

, а затем в пользовательском интерфейсе Класс, где вы хотите сделать некоторый интерфейс логики:

resolvedHub.Subscribe<MyMessage>((m) => { MessageBox.Show("Message Received"); }, true); 
+0

Что представляет собой контейнерный объект и как его получить? – mkkekkonen

+0

Контейнерный контейнер для инверсии контейнера управления. Короче говоря, это способ разрешения зависимостей, поддерживая слабое соединение. подробнее здесь http://arteksoftware.com/ioc-containers-with-xamarin/ – wishmaster

+0

Спасибо за информацию! – mkkekkonen

Смежные вопросы