[英]Change SIM country programmatically?
如何在没有 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'
由于我的 SIM 卡来自美国,因此两个输出都是us
。 例如,如何以编程方式使 output 成为fr
(法国)?
基本上,我想欺骗我的智能手机,使其认为其 SIM 的国家和网络是 France ,例如。
像这样的东西是完美的,但它不存在:
tm.setSimCountryIso('fr')
tm.setNetworkCountryIso('fr')
没有root,您所要求的是不可能的。
正如评论中已经说明的那样,除非它是一个特殊的可写 SIM ,否则物理上不可能更改 SIM 的ICCID 。
至于对getSimCountryIso
和getNetworkCountryIso()
的调用,它们是系统 API。 没有root,就没有办法干扰他们的操作。
Android 具有多层安全性,包括基于用户权限限制应用程序访问、默认启用SELinux 、作为验证启动的一部分进行验证性检查等。
如果你在设备上有 root,你可以创建一个Xposed 框架模块来挂钩这些函数并覆盖它们的返回值。
如果您好奇,用于将 ICCID 信息转换为两个字母国家名称的表在这里是硬编码的。 如果该链接无法正确打开 - 它从第 316 行开始。
因此,改变这一点需要重新编译操作系统的核心 JARs 之一。
另请注意,根据您的实际目的,更改这两个函数的结果可能根本不起作用。
例如,如果您想通过手机为其他国家/地区创建 Google 帐户,更改 SIM 卡将无济于事,因为无论您如何连接到 Internet,Google 仍会查看您的 IP 地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.