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