15

我的 Android 应用程序需要对不同的移动国家代码做出不同的反应。

它似乎被硬编码为mcc310 (US)TelephonyManager.getSimCountryIso()我可以从或使用资源文件夹中读取此值,res/values-mcc123/但如何在模拟器中设置此值?

4

6 回答 6

15

要更改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。但是,这不会永久更改这些属性。

于 2016-05-27T13:02:29.020 回答
3

我观察到此属性的值在某些 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来验证值是否已更改。

于 2018-04-19T13:15:41.593 回答
0

请注意,在每个国家/地区依赖 MCC 并不总是正确的。例如,Digicell 在多个国家/地区使用一个 MCC+MNC。还要理解,从网络的角度来看,MCC 的整个想法是相当可笑的。如果您两次都使用 AT&T 手机在 T-Mobile 上,那么知道您是在德国还是在荷兰是无关紧要的。

于 2010-05-18T00:40:13.797 回答
0

在模拟器上:转到设置->无线和网络->移动网络->接入点名称。尝试更改设置 APN 中的 MCC 值,然后尝试您的代码。

于 2010-04-14T14:31:26.467 回答
0

似乎无法通过 Android 模拟器上的设置更改 MCC/MNC,每次尝试此操作时,预配置的“T-Mobile”APN 都会从列表中消失,并且网络连接会丢失。我什至让模拟器在更改后自发重启。

编程方式也不起作用,APN 将在以下情况下消失:

root@generic_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

不过,可以通过以与允许更改MSISDNIMEI相同的方式破解模拟器来实现。

于 2015-08-26T10:10:07.270 回答
0

在模拟器中更改 MCC+MNC 只能通过 ADB 完成。要更改模拟器中的 MCC+MNC,连接到 ADB 执行以下操作

adb -s 127.0.0.1:53001 shell

然后把你的国家代码放在那里。23801 是丹麦国家代码。

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

对于 Droid4X 模拟器,它是

setprop persist.droid4x.mccmnc 23801

重启模拟器。

于 2015-11-10T15:08:07.027 回答