繁体   English   中英

以编程方式更改 SIM 国家/地区?

[英]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

至于对getSimCountryIsogetNetworkCountryIso()的调用,它们是系统 API。 没有root,就没有办法干扰他们的操作。

Android 具有多层安全性,包括基于用户权限限制应用程序访问、默认启用SELinux 、作为验证启动的一部分进行验证性检查等。

如果你在设备上有 root,你可以创建一个Xposed 框架模块来挂钩这些函数并覆盖它们的返回值。

如果您好奇,用于将 ICCID 信息转换为两个字母国家名称的表在这里是硬编码的。 如果该链接无法正确打开 - 它从第 316 行开始。

因此,改变这一点需要重新编译操作系统的核心 JARs 之一。

另请注意,根据您的实际目的,更改这两个函数的结果可能根本不起作用。

例如,如果您想通过手机为其他国家/地区创建 Google 帐户,更改 SIM 卡将无济于事,因为无论您如何连接到 Internet,Google 仍会查看您的 IP 地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM