Являются ли значения диспетчера телефонии надежными и изменчивыми (cdma)?

Я хочу знать, могу ли я полагаться на значения телефонии, такие как страна, MCC и т. д., в Android для своего приложения. Могу ли я изменить их на ходу с помощью setprop? Я попытался изменить с помощью setprop, но это не сработало. Насколько я понимаю, диспетчер телефонии - это класс/интерфейс, который представляет аппаратную конфигурацию GSM или CDMA. В случае GSM это может быть SIM-карта, а в случае CDMA это может быть аппаратное обеспечение. Мои вопросы:

  • Кто обновляет эти значения в обоих случаях впервые?
  • Сохраняются ли эти значения ОС только для чтения?
  • Что делать, если пользователь путешествует в другую страну или зону, некоторые значения, такие как код страны и значения MCC, обновляются автоматически?
  • Могу ли я сбросить эти значения?

Я не собираюсь менять какие-либо из этих значений, но хочу понять, как они работают! Я был бы признателен, если кто-то может помочь мне в этом.


person rana    schedule 18.07.2012    source источник


Ответы (3)


Согласно документации Android

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

TelephonyManager используется для чтения информации о телефоне. Что касается вашего вопроса о кодах MCC и MNC: да, они изменятся, когда телефон окажется в другой стране. Вы можете подписаться на получение этих событий и определить, что пользователь сейчас находится в другой стране.

person kenota    schedule 18.07.2012
comment
Я нашел способ решить эту проблему на телефоне CDMA. Если это телефон CDMA, то телефон всегда имеет оборудование ICC, сравнимое с SIM-картами в GSM. Все, что вам нужно сделать, это использовать системные свойства, связанные с аппаратным обеспечением. Программно вы можете использовать отражение Java, чтобы получить эту информацию. Это невозможно изменить, даже если система имеет root-права, в отличие от устройства GSM. Класс‹?› c=Class.forName(android.os.SystemProperties); Метод get = c.getMethod(get, String.class); String homeOperator = ((String) get.invoke(c, ro.cdma.home.operator.numeric)); - person rana; 23.07.2012
comment
Обратите внимание, что это может привести к ложным срабатываниям, когда кто-то находится близко к границе. Как быть на пляже в поле зрения соседней страны. Происходит постоянно там, где я живу. - person Bo Persson; 29.07.2012

@Bo То, как работает CDMA, отличается от GSM. У CDMA всегда была одна домашняя база и множество гостевых баз. и вы всегда можете узнать об операторе посетителя, используя методы TelephonyManager, которые считаются ненадежными для CDMA.

person rana    schedule 31.07.2012

Я решил добавить это как ответ...

Я нашел способ решить эту проблему на телефоне CDMA. Если это телефон CDMA, то телефон всегда имеет оборудование ICC, сравнимое с SIM-картами в GSM. Все, что вам нужно сделать, это использовать системные свойства, связанные с аппаратным обеспечением. Программно вы можете использовать отражение Java, чтобы получить эту информацию. Это невозможно изменить, даже если система имеет root-права, в отличие от устройства GSM. Класс c=Class.forName("android.os.SystemProperties"); Метод get = c.getMethod("get", String.class); String homeOperator = ((String) get.invoke(c, "ro.cdma.home.operator.numeric"));

person rana    schedule 21.09.2012