Откройте Системные настройки из Сервиса - PullRequest
1 голос
/ 02 августа 2011

Я пишу сервис для сбора показаний местоположения, когда мое приложение работает на переднем плане. В LocationListener я хотел бы использовать метод onProviderDisabled(), чтобы открыть диалоговое окно, сообщающее пользователю, что поставщик местоположения отключен, и иметь кнопку в диалоговом окне, которая запускает панель настроек местоположения системы, позволяя пользователю включите провайдера местоположения, если они выбирают. Если бы это было занятие, я бы запустил системные настройки, используя startActivityforResult(), но я могу использовать только startActivity из службы.

У меня такой вопрос: есть ли способ открыть настройки из службы и закрыть это новое действие и вернуться к моему приложению после того, как пользователь изменит настройку?

РЕДАКТИРОВАТЬ: Я пытаюсь достичь Service, запущенный с момента открытия приложения, до его закрытия и сбора показаний местоположения, поддерживая наилучшую оценку местоположения для использования в приложении. Если в LocationListener внутри службы вызван onProviderDisabled, я хочу, чтобы это открыло диалоговое окно, которое даст пользователю возможность перейти к Системным настройкам и включить поставщиков местоположения (или отменить и продолжить, хотя некоторые из функции приложения не будут работать без местоположения). Я согласен с тем, что, возможно, Service не место для запуска диалога / запуска активности, поскольку это фоновый компонент без пользовательского интерфейса, но я не уверен, куда должен идти код для этого.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

Начиная с редактирования вашего вопроса и комментария к ответу Сэма, я в основном проверял бы активность (или все действия) приложения и запускал оттуда диалоговое окно и последующую страницу «Настройки» (если пользовательвыбирает «Настройки»).

По сути, служба должна делать то, что ей нужно, в зависимости от текущей среды, с которой сталкивается основная деятельность (поставщик отключен / включен).Если ваша Служба будет работать при отсутствии пользовательского интерфейса, тогда она должна соответствующим образом компенсировать и уменьшить свои «обязанности».

Кроме того, в этом сценарии Сэм использует идею уведомления (что, в свою очередь, может привести кНастройки, которые будут открыты) является хорошим промежуточным положением.

РЕДАКТИРОВАТЬ Чтобы объяснить немного дальше.Возьмите что-нибудь простое, как приложение электронной почты.У этого есть два аспекта ...

Во-первых, есть пользовательский интерфейс - когда пользователь открывает свое почтовое приложение, если «сеть» отключена, пользователю сообщают об этом с помощью диалогового окна с возможностью перейти к настройкам сети.включить сеть.Нажатие НАЗАД (из настроек) вернется в приложение электронной почты и попытается загрузить любые новые электронные письма.Если пользователь решает не включать сеть, он все равно может просматривать ранее загруженные электронные письма (аналогично частичной функциональности в вашей ситуации).

Во-вторых, существует фоновая служба, которая периодически (каждые 15 минут, 30 минут, 1 час).и т.д.) будет пытаться загрузить любые новые электронные письма, даже если пользовательский интерфейс закрыт.Если сеть отключена, она просто переходит в спящий режим (до следующего времени загрузки).

Теоретически, если пользователь отключает сеть, фоновая служба электронной почты «может» предоставить диалоговое окно или уведомление с надписью «Вы делаете».понимаете, я не могу сейчас работать? "... это то, что вы хотите сделать, НО, если у сервиса есть другие дела, он может просто делать это и игнорировать любые связанные с сетью задачи.В следующий раз, когда пользователь запускает Активность, он получает диалоговое окно с опцией включения сети.

Имеет ли это смысл?

0 голосов
/ 02 августа 2011

просто любопытно.служба может работать, даже если пользователь не видит экран, или даже экран может быть выключен.Это хорошая идея, в любом случае показывать диалог из службы.

, поскольку вы знаете, как показать действие, в onCreate запустите намерение для настроек и завершите его, как только вы попадете в onActivityResult.

уверен, что это простой взлом.

РЕДАКТИРОВАТЬ: , если вы не уверены, куда он должен идти.лучшее, о чем я могу думать, и даже в некоторых приложениях это область уведомлений .

0 голосов
/ 02 августа 2011

Да, у сервиса есть метод ContextWrapper.startActivity () , который откроет нужное меню настроек.Пользователь выберет то, что он хотел бы включить, а затем вернется назад, чтобы вернуть свою активность.Вернувшись в свою деятельность, вы можете проверить LocationManager.isProviderEnabled () .К сожалению, служба не может получить результат активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...