Закрытие службы OnHandleIntent mqtt

У меня есть фоновая служба, которая инициализирует библиотеку System.Net.MQTT и ждет сообщения от mqtt. У меня есть проблема инициализации библиотеки OnHandleIntent и закрытия службы !! при загрузке, а не получатель сообщения, Почему ??

 

[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);
                });
            }
        });
    }
}



person Michele Mancini    schedule 24.12.2017    source источник
comment
См. IntentService, IntentService будет остановлен, если работа будет выполнена . Почему бы не использовать Service и закрыть его вручную.   -  person Robbit    schedule 25.12.2017
comment
Дассссс работает !!! , Спасибо!!!   -  person Michele Mancini    schedule 25.12.2017


Ответы (1)


IntentService

IntentService относится к сервису расчета, который вы можете использовать для выполнения работы, которая займет много времени.

Другой с Service

  • IntentService откроет другой рабочий поток, который отличается от потока пользовательского интерфейса, чтобы завершить работу.

  • IntentService остановится, когда работа будет закончена.

Поэтому я предлагаю вам использовать Service для достижения своей цели.

person Robbit    schedule 25.12.2017