У меня есть приемник для намерения BOOT_COMPLETED, и он запустит службу, вызвав startService с намерением и процессами службы, которые намерены использовать функцию onStartCommand, создав поток, который выполняет HTTP-сообщение на сервер.
При включении питания иногда требуется от 3 до 5 секунд, чтобы получить активное соединение с данными на телефоне, когда это произойдет. Служба не выполняет HTTP-сообщение, поскольку соединение с данными отсутствует. Возможно ли, чтобы Получатель отправил намерение Службе с использованием startService с задержкой.? так что, когда onStartCommand of Service называется соединением данных, готов к публикации данных.
Прежде чем выполнять какую-либо передачу данных, создайте цикл, который будет опросить Android TelephonyManager. getDataState() с экспоненциальным отклонением, чтобы не использовать слишком много CPU или не утилизировать пользовательскую батарею. Продолжайте пытаться, пока не получите флаг DATA_CONNECTED, или пока не получите какой-то тайм-аут, чтобы остановить попытку.
Не можете ли вы использовать asynctask для выполнения HTTP-запроса, а затем, возможно, поймать исключение в asynctask для проверки исключения тайм-аута?
Если истечет время ожидания asynctask, то изящно возвратитесь и запустите свою службу для создания новой асинхронной ссылки, пока не получите соединение?