Как изменить код мобильного телефона (MCC) в эмуляторе Android?

Мое приложение Android должно реагировать по-разному на разные коды мобильных стран.

Кажется, что он жестко привязан к mcc310 (US). Я могу прочитать это значение из TelephonyManager.getSimCountryIso() или с помощью папки ресурсов, например res/values-mcc123/, но как установить это значение в эмуляторе?

Ответ 1

Чтобы изменить то, что возвращает TelephonyManager.getSimCountryIso(), просто выполните

adb shell setprop gsm.sim.operator.iso-country no

и теперь он возвращает no (Норвегия).

Если вы хотите изменить то, что возвращает TelephonyManager.getSimOperator() (MCC + MNC), выполните

adb shell setprop gsm.sim.operator.numeric 24201

и вы изменили MCC на 242 (Норвегия) и MNC на 01 (Telenor).

Чтобы узнать, какие другие свойства вы можете изменить, выполните

adb shell getprop

Это проверено для работы как с AVD, так и с Genymotion. Однако это не изменяет эти свойства настойчиво.

Ответ 2

Я заметил, что значение для этих свойств варьируется в зависимости от уровня API. Я пытался решить эту проблему.

Вы можете использовать следующую команду для изменения значения в API 26:

  1. adb shell
  2. su
  3. setprop gsm.operator.numeric 280701

Примечание. Некоторые эмуляторы требуют перезагрузки.

На некоторых эмуляторах свойство может иметь другое имя

Вы можете найти имя свойства следующим образом:

  1. adb shell
  2. getprop

Это даст вам данные, подобные следующим:

...
[dalvik.vm.lockprof.threshold]: [500]
[dalvik.vm.stack-trace-file]: [/data/anr/traces.txt]
[dalvik.vm.usejit]: [true]
[dalvik.vm.usejitprofiles]: [true]
[debug.atrace.tags.enableflags]: [0]
[debug.force_rtl]: [0]
[dev.bootcomplete]: [1]
[drm.service.enabled]: [true]
[gsm.current.phone-type]: [1]
[gsm.defaultpdpcontext.active]: [true]
[gsm.network.type]: [LTE]
[gsm.nitz.time]: [1524141151210]
[gsm.operator.alpha]: [Android]
[gsm.operator.iso-country]: [us]
[gsm.operator.isroaming]: [false]
[gsm.operator.numeric]: [310260]
[gsm.sim.operator.alpha]: [Android]
[gsm.sim.operator.iso-country]: [us]
[gsm.sim.operator.numeric]: [310260]
[gsm.sim.state]: [READY]
[gsm.version.baseband]: [1.0.0.0]
[gsm.version.ril-impl]: [android reference-ril 1.0]
[hwservicemanager.ready]: [true]
[init.svc.adbd]: [running]
[init.svc.audio-hal-2-0]: [running]
[init.svc.audioserver]: [running]
[init.svc.bootanim]: [stopped]
[init.svc.camera-provider-2-4]: [running]
[init.svc.cameraserver]: [running]
...

Поиск numeric, скопировав вывод в текстовом файле. Получить имя свойства и использовать setprop <property name> <new MCC MNC>

Вы также можете использовать getProp чтобы проверить, было ли изменено значение.

Ответ 3

Изменение MCC + MNC в эмуляторе может быть выполнено только с помощью ADB. Чтобы изменить MCC + MNC в эмуляторе, подключитесь к ADB, выполните следующие

adb -s 127.0.0.1:53001 shell

Затем введите код страны. 23801 - код датского coutry.

setprop persist.<name of the emulator>.mccmnc 23801

Для эмулятора Droid4X это

setprop persist.droid4x.mccmnc 23801

Перезагрузите эмулятор.

Ответ 4

В эмуляторе: перейдите в Настройки- > Проводная связь и Сеть- > Мобильная сеть- > Имена точек доступа. Попробуйте изменить значение MCC в наборе APN, а затем попробуйте код.

Ответ 5

Знайте, что полагаться на MCC не всегда правильно в каждой стране. Digicell, например, использует один MCC + MNC в нескольких странах. Также поймите, что вся идея MCC довольно смехотворна с точки зрения сети. Совсем не важно знать, находитесь ли вы в Германии или в Нидерландах, если оба раза вы на T-Mobile с телефоном AT & T.

Ответ 6

Кажется, что невозможно изменить MCC/MNC с помощью настроек на эмуляторе Android, каждый раз, когда это делается, предварительно настроенный "T-Mobile" APN исчезнет из списка, и сетевое подключение будет потеряно. У меня даже был эмулятор, спонтанно перезагрузившийся после изменения.

Программный способ тоже не работает, APN исчезнет сразу после:

[email protected]_x86:/ # content update --uri content://telephony/carriers/ --bind name:s:'TheAPN' --bind apn:s:apn.operator.net --bind numeric:i:12345 --bind user:s: --bind password:s: --bind server:s: --bind proxy:s: --bind mmsproxy:s: --bind mmsc:s: --bind type:s: --bind mcc:i:123 --bind mnc:i:45 --bind current:i:1 --where _id=1

Это можно было бы взломать эмулятор теми же способами, которые позволяют изменить MSISDN или IMEI.

Ответ 7

Я не хочу ничего менять, только регистрирую MCC... в файл и отправляю на ПК. По WIFI кажется невозможным; тогда это будет по почте.