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 有消息到达,以便我可以,例如显示警报 window?
此示例是使用 Page
完成的,但您可以 subscribe/unsubscribe 使用 Application
class,或者在您的应用程序逻辑中有选择地使用。
在您的 Xamarin.Forms
项目中 subscribe/unsubscribe 通过 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");
}
在 "native" 项目中通过 MessageCenter
发送消息:
MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "Whosebug Rocks");
所以,我的本机项目 (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 有消息到达,以便我可以,例如显示警报 window?
此示例是使用 Page
完成的,但您可以 subscribe/unsubscribe 使用 Application
class,或者在您的应用程序逻辑中有选择地使用。
在您的 Xamarin.Forms
项目中 subscribe/unsubscribe 通过 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");
}
在 "native" 项目中通过 MessageCenter
发送消息:
MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "Whosebug Rocks");