我有一个后台服务,初始化System.Net.MQTT库并等待来自mqtt的消息。 我有一个ptoblem OnHandleIntent inizialize库和关闭服务!在启动时启动,而不是接收消息,为什么??
[BroadcastReceiver(Label = "StartReceiver", Enabled = true)] [IntentFilter(new[] { Intent.ActionBootCompleted })] public class StartReceiver : BroadcastReceiver { public override void OnReceive(Context context, Intent intent) { Toast.MakeText(context, "i got it " , ToastLength.Long).Show(); if (intent.Action == Intent.ActionBootCompleted) { var serviceIntent = new Intent(context, typeof(ServiceTermoCoperta)); serviceIntent.AddFlags(ActivityFlags.NewTask); context.StartService(serviceIntent); } } } [Service(Exported = true, Enabled = true)] public class ServiceTermoCoperta : IntentService { public IMqttClient clientMQTT; [return: GeneratedEnum] public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) { base.OnStartCommand( intent, flags, startId); return StartCommandResult.Sticky; } protected override async void OnHandleIntent(Intent intent) { var mqttConfig = new MqttConfiguration { Port = 1883, MaximumQualityOfService = MqttQualityOfService.ExactlyOnce, KeepAliveSecs = 60, //WaitTimeoutSecs = 50, //ConnectionTimeoutSecs = 50, AllowWildcardsInTopicFilters = true }; clientMQTT = await MqttClient.CreateAsync("iot.pushetta.com", mqttConfig); new Handler(Looper.MainLooper).Post(() => { if (clientMQTT != null) { clientMQTT.ConnectAsync(new MqttClientCredentials("pusmdm476u47r", "xxxxxx", "aaaaaa")).Wait(); clientMQTT.SubscribeAsync("/pushetta.com/channels/tteste", MqttQualityOfService.AtLeastOnce).Wait(); clientMQTT.MessageStream.Subscribe(msg => { string bs = msg.Topic + " " + Encoding.Default.GetString(msg.Payload); //Send Data Intent localIntent = new Intent(Constants.BROADCAST_ACTION).PutExtra(Constants.EXTENDED_DATA_STATUS, bs); // Broadcasts the Intent to receivers in this app. SendBroadcast(localIntent); }); } }); } }
答案 0 :(得分:1)
IntentService
属于计算服务,您可以使用它来完成需要花费很多时间的工作。
Service
IntentService
将打开另一个与UI线程不同的工作线程来完成工作。
IntentService
将停止itselt。
因此,我建议您使用Service
来实现目标。