Запросить обновление местоположения GSM/UMTS в Android
Позвольте мне кратко изложить мою проблему и то, что я хотел бы достичь.
У меня телефон SonyEricsson X10i с Android 2.3.3. Я понял, что иногда мой телефон не принимает звонки, даже если это указывает на полное покрытие. Я проверил себя в MSC/VLR, и это указывает, что я зарегистрировался, и мой телефон в настоящее время активен (и также нет флага IMSI DETACH), поэтому он должен работать правильно (только последняя Дата Активации немного устарела ~ пара часов, которые также могут быть хорошими, без SMS/Call/ Update Location), как я упоминал ранее, телефон указывает на полное покрытие, и кажется, что он находится в сети. Но когда я попытался позвонить, я только достиг голосовой почты. В MSC/VLR не вижу причины ответа на пейджинговый вызов, но телефон ничего не делает. Я пробовал с другой версией SW (4.0.3 ICS), но результат тот же. Но я не заметил аналогичного поведения с другим телефоном (того же типа). Извините за длинное резюме.
Так как я описал выше, я пытаюсь написать приложение / услугу, которая будет выполнять обновление местоположения GSM/UMTS через 15-20 минут, но я не смог найти какую-либо процедуру в android.telephony.gsm.GsmCellLocation
, android.telephony.TelephonyManager
который сделает это для меня.
Моя другая проблема - это getState()/setStateOutOfService()/ setState()
процедуры из класса ServiceState... Кажется, они не очень работают. Например, когда я впервые вызываю getState(), я всегда возвращаю STATE_OUT_OF_SERVICE, что не соответствует действительности… Когда я устанавливаю состояние в STATE_POWER_OFF
или же STATE_IN_SERVICE
по крайней мере, я вернусь в это состояние из getState()
потом, но телефон ничего не делает для этого. (Даже не указывать вне зоны охвата и т. Д.)
Любые предложения / комментарии приветствуются.
1 ответ
Я также видел эту проблему много раз (2 телефона того же производителя, что и у вас). Из вашего вопроса я понимаю, что вы хотите заставить телефон отправлять MM периодическое обновление местоположения (которое оно должно отправлять в любом случае).
Это слишком низкий уровень, и вы нигде не можете форсировать это непосредственно в интерфейсе программирования. Процедура управления мобильностью является частью телефонного стека и подробно описана в 3GPP TS 24.008, доступном по адресу www.3gpp.org. Пункт 4.2.2 определяет, когда телефон должен отправлять эти обновления местоположения.
Единственное, что можно сделать, это попытаться косвенным путем заставить телефон привести в состояние, когда он отправит обновление местоположения. Вы можете сделать это, выбрав другую сеть вручную. Если все прошло успешно, и вы вручную повторно выбрали домашнюю сеть, вы бы инициировали обновление местоположения. Если он отклонен и возвращается к своей домашней сети, то, я думаю, будет также инициировано обновление местоположения. Но это также будет связано с небольшими затратами - использование батареи при сканировании сети и потеря времени при сканировании и выборе сети вручную. (Мой личный опыт показывает, что потерянные звонки не случаются достаточно часто, чтобы оправдать это.)