使用 Android 模拟器更改 TelephonyManager.getNetworkCountryIso 输出

Changing TelephonyManager.getNetworkCountryIso output with Android emulator

我正在制作一个应用程序,该应用程序使用用户位置来确定向用户显示哪些数据。我正在使用 TelephonyManager.getNetworkCountryIso(不是 sim 版本)来确定位置并且它的工作就像一个魅力。无论如何,我可以通过更改模拟器设置中的设置来进一步测试它,这样我就可以相信 phone 在美国以外的另一个国家(默认)。

此刻TelephonyManager.getNetworkCountryIso正在输出:"us"

注意:我知道 getNetworkCountryIso 有一些缺点,但那是另一个讨论:-)

您可以使用以下命令更改值:

  1. adb shell
  2. su
  3. setprop gsm.operator.iso-country uk
  4. 在某些模拟器上,您可能需要重新启动它才能产生影响。

见下方截图:

在某些模拟器上,属性 名称可能不同。

您可以找到 属性 名称如下:

  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]
...

通过复制文本文件中的输出来搜索 iso-country。获取 属性 名称并使用 setprop <property name> <new iso>

您也可以使用getProp来验证值是否已更改。