【发布时间】:2018-06-06 08:28:13
【问题描述】:
我有一个后台服务,它初始化 System.Net.MQTT 库并等待来自 mqtt 的消息。 我有一个问题 OnHandleIntent 初始化库并关闭服务!在开机启动时,并没有收到消息,为什么??
[BroadcastReceiver(Label = "StartReceiver", Enabled = true)] [IntentFilter(new[] { Intent.ActionBootCompleted })] 公共类 StartReceiver : BroadcastReceiver { 公共覆盖无效 OnReceive(上下文上下文,意图意图) { Toast.MakeText(context, "我明白了", ToastLength.Long).Show(); if (intent.Action == Intent.ActionBootCompleted) { var serviceIntent = new Intent(context, typeof(ServiceTermoCoperta)); serviceIntent.AddFlags(ActivityFlags.NewTask); context.StartService(serviceIntent); } } } [服务(导出 = 真,启用 = 真)] 公共类 ServiceTermoCoperta : IntentService { 公共 IMqttClient 客户端MQTT; [返回:生成的枚举] 公共覆盖 StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) { base.OnStartCommand(intent, flags, startId); 返回 StartCommandResult.Sticky; } protected override async void OnHandleIntent(Intent intent) { var mqttConfig = 新的 MqttConfiguration { 端口 = 1883, MaximumQualityOfService = MqttQualityOfService.ExactlyOnce, KeepAliveSecs = 60, //WaitTimeoutSecs = 50, //ConnectionTimeoutSecs = 50, AllowWildcardsInTopicFilters = true }; clientMQTT = 等待 MqttClient.CreateAsync("iot.pushetta.com", mqttConfig); 新处理程序(Looper.MainLooper).Post(() => { 如果(客户端MQTT!= null) { clientMQTT.ConnectAsync(new MqttClientCredentials("pusmdm476u47r", "xxxxxx", "aaaaaa")).Wait(); clientMQTT.SubscribeAsync("/pushetta.com/channels/tteste", MqttQualityOfService.AtLeastOnce).Wait(); clientMQTT.MessageStream.Subscribe(msg => { 字符串 bs = msg.Topic + " " + Encoding.Default.GetString(msg.Payload); //发送数据 意图 localIntent = new Intent(Constants.BROADCAST_ACTION).PutExtra(Constants.EXTENDED_DATA_STATUS, bs); // 将 Intent 广播到此应用中的接收者。 发送广播(本地意图); }); } }); } }【问题讨论】:
-
Please refer to
IntentService,IntentService将在工作完成后停止。为什么不使用Service,然后手动关闭它。 -
Yesssss 工作!!! ,谢谢!!!
标签: android xamarin service mqtt boot