[英]Android dual SIM -> change network
從 SDK 22 開始,Android 正式支持 Dual-SIM 並提供了一些文檔。
我想知道應用程序是否可以更改 SIM 應訪問網絡的位置。 例如,我有一部運行 Nougat 的一加一 3T 手機,我使用兩張 SIM 卡。 進入設置,我可以手動更改/選擇用於訪問網絡的 SIM 卡。
有可能做到這一點嗎?
謝謝 !
我為 Android 7.1.1 API 25 找到的解決方案是使用 SubscriptionManager 和反射 api。
請注意,您必須在 /system/priv-app/ 中安裝您的應用程序
您可以通過 adb root 執行此操作。
確保您的 AndroidManifest.xml 中有
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
代碼如下
這段代碼唯一要做的就是交換 sim 數據
private Integer subActual = null;
private Integer sim1 = null;
private Integer sim2 = null;
private SubscriptionInfo simInfo1;
private SubscriptionInfo simInfo2;
private Boolean dualSim;
SubscriptionManager subscriptionManager = SubscriptionManager.from(this);
@SuppressLint("MissingPermission")
List smList = subscriptionManager.getActiveSubscriptionInfoList();
Method[] smMethods = subscriptionManager.getClass().getMethods();
dualSim = smList.size() == 2;
if (dualSim) {
simInfo1 = (SubscriptionInfo) smList.get(0);
simInfo2 = (SubscriptionInfo) smList.get(1);
sim1 = simInfo1.getSubscriptionId();
sim2 = simInfo2.getSubscriptionId();
}
for (Method m : smMethods) {
if (m.getName().equals(("getDefaultDataSubscriptionId"))) {
try {
subActual = (int) m.invoke(subscriptionManager);
} catch (Exception e) {
}
}
}
for (Method m : smMethods) {
if (m.getName().equals("setDefaultDataSubId") && dualSim) {
try {
if (subActual == sim1) {
m.invoke(subscriptionManager, sim2);
}
if (subActual == sim2) {
m.invoke(subscriptionManager, sim1);
}
} catch (Exception e) {
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.