[英]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.