显示来自服务的弹出消息

时间:2019-06-01 13:40:49

标签: c# xamarin.android visual-studio-2017

我正在尝试创建一个处理程序,当从服务中运行的SignalR接收到消息时,该处理程序将产生一个弹出窗口。我已经在非服务性组织中工作了,但是在服务性组织中却行不通。

此代码可用于非服务性

client.OnMessageReceived += 
(sender2, message) => 
RunOnUiThread(() =>
showMessage(message));

其中client是SignalR客户端,showMessage是从客户端收到消息时调用的方法。没问题。

现在,我想在/服务中运行客户端,并且需要连接处理程序以完成基本相同的操作。我尝试了在StackOverflow和其他网站上找到的几种方法,但那里的所有东西都是java,而不是Xamarin for Visual Studio(2017)的c#,并且翻译效果不佳。我对如何进行一无所知。

1 个答案:

答案 0 :(得分:0)

您的应用正在创建通知频道吗?您应该将通知通道ID传递给NotificationCompat.Builder构造函数。

您似乎没有在调用RegisterForegroundService方法来将该服务提升为前台服务。您需要在RegisterForegroundService替代中尽早致电OnCreate。现代版本的Android需要前台服务才能在几秒钟内显示通知,否则将引发异常。

您可能想将android.permission.FOREGROUND_SERVICE权限添加到Android清单中,因为Android P及更高版本需要此权限。

如果您的应用程序当前没有热门活动,我认为ACR.UserDialogs不会起作用。该服务使活动失效,因此很有可能会遇到这种情况。您只需让服务更新现有的前台通知即可向用户显示一条新消息可用。