【问题标题】:Service close OnHandleIntent mqtt服务关闭 OnHandleIntent mqtt
【发布时间】: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


【解决方案1】:

IntentService

IntentService 属于计算服务,您可以使用它来完成需要花费大量时间的工作。

Service不同

  • IntentService 将打开另一个不同于 UI 线程的工作线程来完成工作。

  • IntentService 将在工作完成后自行停止。

所以我建议你使用Service 来实现你的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多