我正在尝试创建一个处理程序,当从服务中运行的SignalR接收到消息时,该处理程序将产生一个弹出窗口。我已经在非服务性组织中工作了,但是在服务性组织中却行不通。
此代码可用于非服务性
client.OnMessageReceived +=
(sender2, message) =>
RunOnUiThread(() =>
showMessage(message));
其中client
是SignalR客户端,showMessage
是从客户端收到消息时调用的方法。没问题。
现在,我想在/服务中运行客户端,并且需要连接处理程序以完成基本相同的操作。我尝试了在StackOverflow和其他网站上找到的几种方法,但那里的所有东西都是java,而不是Xamarin for Visual Studio(2017)的c#,并且翻译效果不佳。我对如何进行一无所知。
答案 0 :(得分:0)
您的应用正在创建通知频道吗?您应该将通知通道ID传递给NotificationCompat.Builder
构造函数。
您似乎没有在调用RegisterForegroundService
方法来将该服务提升为前台服务。您需要在RegisterForegroundService
替代中尽早致电OnCreate
。现代版本的Android需要前台服务才能在几秒钟内显示通知,否则将引发异常。
您可能想将android.permission.FOREGROUND_SERVICE
权限添加到Android清单中,因为Android P及更高版本需要此权限。
如果您的应用程序当前没有热门活动,我认为ACR.UserDialogs不会起作用。该服务使活动失效,因此很有可能会遇到这种情况。您只需让服务更新现有的前台通知即可向用户显示一条新消息可用。