Хорошо, поэтому проблема здесь в том, что у меня есть видеокамера, которая подключена к телефону через Bluetooth. Вся связь с устройством осуществляется через службу android. Служба периодически обновляет камеру с помощью GPS-координат. Сервис, к сожалению, не написан моей компанией, и мы имеем только контроль над его запуском и отправкой его команд (однако он сам GPS, если подключен к устройству). Как только служба запускается нашим приложением, мы пытаемся подключиться к любым сопряженным устройствам, которые содержат мои компании OUI. Как только устройство отключится (возможно, его выключили или батарея разрядилась), он не будет автоматически подключен, пока пользователь не запустит наше приложение. Таким образом, координаты GPS не будут отправляться на камеру в этом сценарии.
Это проблема, потому что пользователь (который ничего не знает об этих услугах и что не так) подумает, должен ли он включить устройство обратно на него, должен быть подключен.
Поэтому я думал, что могу использовать AlarmManager с широковещательным приемником или службой (возможно, услугой намерения, потому что для завершения соединения требуется несколько секунд). Возможно, через несколько минут я смогу проверить подключение к камере. Если его настоящее только что прекратилось, а если не пытаться подключиться (если есть сопряженные устройства).
Однако проблема в том, что, если мое приложение уже запущено? Если это тогда, пользователь управляет подключением к устройству (им предлагается его). Нужно ли использовать общие настройки или что-то в этом роде, чтобы определить, запущено/выключено мое приложение? Есть ли способ сообщить службе, если приложение запущено? Я вижу, что это становится сложным. Если у кого-то есть идеи, как справиться с этим, дайте мне знать.
Ответ Binyamin Sharet был хорош, но, к сожалению, он не разрешил мою проблему, потому что, когда приложение больше не видно или используется, оно все еще может работать, и приложение довольно эффективно отключается. Еще одно замечание - когда запускается ваш сервис/слушатель или любой другой компонент, который будет создавать экземпляр класса Application, который может сделать вещи сложными.
Возможно, я неправильно сформулировал свой вопрос. Однако я хотел, чтобы мое приложение не пыталось восстановить соединение, пока оно активно открывалось (или использовалось).
Это оказалось намного проще сделать, просто записав общие настройки в состояние (занято/не занято) и проверив, что в моем коде, который запускался из диспетчера аварийных сообщений. Это было немного дополнительного состояния, которое я не хотел, но на самом деле было не слишком сложно.
Я использовал commonsware бодрствующее намерение просыпаться каждую минуту и делать следующее:
Хотя я, возможно, смогу оптимизировать это, похоже, что он работает, и он очень неудачный. Я знаю, что это не очень удобно для аккумулятора, но я все еще не вижу свое приложение в списке приложений, используя свою батарею (хотя, похоже, Android использует больше).
Единственные реальные улучшения, о которых я могу думать, это:
Для простоты я еще не реализовал их.
Я бы предложил следующий метод:
Таким образом, служба не запускается, если приложение все еще работает, и после выключения приложения аварийный сигнал не будет остановлен.