mkk*_*nen 4 c# xamarin.android xamarin xamarin.forms
所以,我在我的原生项目(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);
});
Run Code Online (Sandbox Code Playgroud)
这是我使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
我试图将TinyMessenger添加到我的PCL中,但显然它不受支持(TinyIoc.cs文件中缺少引用等,相同的代码在Android项目中运行良好)
那么,有没有办法通知Xamarin.Forms有关到达的消息,以便我可以显示一个警报窗口?
此示例使用a完成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");
}
Run Code Online (Sandbox Code Playgroud)
在"原生"项目中发送消息MessageCenter:
MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "StackOverFlow Rocks");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1258 次 |
| 最近记录: |