簡體   English   中英

Xamarin - 有沒有辦法從本地項目中通知Xamarin.Forms?

[英]Xamarin - is there a way to notify Xamarin.Forms from a native project?

所以,我在我的原生項目(Android MainActivity OnCreate)中有這個代碼,它沒有做任何事情:

var container = TinyIoCContainer.Current;
TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();

tmh.Subscribe<LocalMessage>((m) => {
    // this doesn't show
    Toast.MakeText(this, m.Content, ToastLength.Long);
});

這是我使用TinyMessenger通知應用程序的地方:

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

        var container = TinyIoCContainer.Current;
        TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();
        tmh.Publish(new LocalMessage(this, msg));
    }
}

我試圖將TinyMessenger添加到我的PCL中,但顯然它不受支持(TinyIoc.cs文件中缺少引用等,相同的代碼在Android項目中運行良好)

那么,有沒有辦法通知Xamarin.Forms有關到達的消息,以便我可以顯示一個警報窗口?

此示例使用Page完成,但您可以使用Application類訂閱/取消訂閱,也可以選擇性地在應用程序邏輯中訂閱/取消訂閱。

在您的Xamarin.Forms項目中,通過MessageCenter訂閱/取消訂閱消息:

protected override void OnAppearing()
{
    base.OnAppearing();
    MessagingCenter.Subscribe<object, string>(this, "ShowAlertMessage", (sender, msg) =>
    {
        Device.BeginInvokeOnMainThread(() => {
            MainPage.DisplayAlert("Push message", msg, "OK"); 
        });
    });
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<object>(this, "ShowAlertMessage");
}

在“本機”項目中通過MessageCenter發送消息:

MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "StackOverFlow Rocks");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM