2014-12-19 5 views
1

Я пытаюсь определить, перезагрузилось ли устройство Android с момента установки значения предпочтения. В идеале я бы хотел сделать это без разрешения android.permission.RECEIVE_BOOT_COMPLETED.Указать, был ли телефон перезагружен.

Один из способов, который я собираюсь сделать, это сохранить другое значение предпочтения, которое содержит какой-то идентификатор сеанса. Когда я обновляю значение предпочтительности, о котором идет речь, я также обновляю значение сеанса. Когда я проверяю значение в предпочтении для значения сеанса, если оно равно текущему значению сеанса, то перезагрузка не была. Если текущее значение сеанса отличается от того, что было сохранено, произошла перезагрузка. К сожалению, я долгое время копался в документах, пытаясь найти значение сеанса, и я ничего не могу найти.

Я хотел бы помочь с одной из двух вещей. Если вы можете указать, где я могу найти что-то похожее на идентификатор сеанса или идентификатор загрузки, тогда я буду использовать свой алгоритм. В качестве альтернативы, я мог бы открыть другой алгоритм для решения проблемы. Спасибо огромное!

+3

Пробовали ли вы 'SystemClock.elapsedRealtime();'? – Raptor

+1

Почему вы не хотите слушать загрузку? – psyren89

+0

К сожалению, я не думаю, что 'SystemClock.elapsedRealtime()' даст мне то, что я хочу. Это дает время с момента последней загрузки. Если я получаю время 3000000 миллисов с момента последнего загрузки, а значение, которое я сохранил ранее, составляло 1000000 миллисов, я не знаю, прошло ли 2000000 миллисов, или если телефон был перезагружен, а еще 3000000 миллисов от. –

ответ

0

Да, вы можете это сделать, используя класс приложения и нестатический вещательный приемник ACTION_SHUTDOWN. Класс Application началась в двух случаях

  1. загрузки Android устройств
  2. Ваше приложение начинается после того, как он был «Force-Close» это.

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

Чтобы получить более подробную информацию вы можете прочитать следующую post, что я написал и попробовать код example, в котором, я добавил

  1. класса Application
  2. загрузка радиовещательного приемника (чтобы показать разницу и как начинается)
  3. Shutdown радиовещательный приемник, который зарегистрировать в Calss Application
+0

Один из сценариев этого не распространяется, если телефон умирает, а затем снова включается. Например, пользователь бросает его или вынимает аккумулятор, из-за чего он мгновенно отключается. Когда телефон снова включится, ваше приложение не будет знать, что это произошло. – Sam