如何在没有 root 访问权限的情况下以编程方式更改 Android 手机 SIM 卡的国家/地区和网络?我正在使用此代码来检索信息:
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
System.out.println(tm.getSimCountryIso()); // prints 'us', but I want it to be 'fr'
System.out.println(tm.getNetworkCountryIso()); // prints 'us, but I want it to be 'fr'
Run Code Online (Sandbox Code Playgroud)
由于我的 SIM 卡来自美国,因此两个输出均为us. 例如,如何以编程方式使输出为fr(法国)?
基本上,例如,我想欺骗我的智能手机,使其认为其 SIM 卡的国家和网络是法国。
像这样的东西将是完美的,但它不存在:
tm.setSimCountryIso('fr')
tm.setNetworkCountryIso('fr')
Lev*_* M. 10
没有root,您所要求的内容是不可能的。
正如评论中已经指出的,除非它是一个特殊的可写 SIM,否则在物理上不可能更改SIM的ICCID。
至于调用getSimCountryIso,getNetworkCountryIso()那些是系统 API。没有root,就没有办法干扰他们的操作。
Android 构建有多层安全性,包括基于用户权限限制应用程序访问、默认情况下强制启用SELinux、作为验证启动的一部分的真实性检查等等。
如果你在设备上有 root,你可以创建一个Xposed 框架模块,它可以挂钩这些函数并覆盖它们的返回值。
如果您好奇,用于将 ICCID 信息转换为两个字母的国家/地区名称的表格在此处进行了硬编码。如果该链接没有正确打开 - 它从第 316 行开始。
所以改变它需要重新编译操作系统的核心 JAR 之一。
另请注意,根据您的真实目的,更改这两个函数的结果可能根本不起作用。
例如,如果您想通过手机为其他国家/地区创建 Google 帐户,更改 SIM 卡将无济于事,因为无论您如何连接到互联网,Google 仍会查看您的 IP 地址。
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |