Android app开发:代码切换移动数据走SIM1/SIM2

权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission
    android:name="android.permission.MODIFY_PHONE_STATE"
    tools:ignore="ProtectedPermissions" />
反射调用:
//传入参数:1-SIM1, 2-SIM2

findViewById(R.id.btn_sim1).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getDefaultDataSubId() != 1) {
            setDefaultDataSubId(1);
            Log.d(TAG, "wjz debug onClick: 切换到SIM1!!!");
        } else {
            Log.d(TAG, "wjz debug onClick: 当前使用SIM1,无需切换!!!");
        }
    }
});

findViewById(R.id.btn_sim2).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (getDefaultDataSubId() != 2) {
            setDefaultDataSubId(2);
            Log.d(TAG, "wjz debug onClick: 切换到SIM2!!!");
        } else {
            Log.d(TAG, "wjz debug onClick: 当前使用SIM2,无需切换!!!");
        }
    }
});

private void setDefaultDataSubId(int subId) {
    SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    try {
        Method method = subscriptionManager.getClass().getDeclaredMethod("setDefaultDataSubId", int.class);
        method.invoke(subscriptionManager, subId);
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        Method method1 = telephonyManager.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
        method1.invoke(telephonyManager, true);
    } catch (Exception e) {
        Log.e(TAG, "wjz debug setDefaultDataSubId: error is " + e.getMessage());
    }
}

private int getDefaultDataSubId() {
    SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    try {
        Method method = subscriptionManager.getClass().getDeclaredMethod("getDefaultDataSubscriptionId");
        return (int) method.invoke(subscriptionManager);
    } catch (Exception e) {
        Log.e(TAG, "wjz debug getDefaultDataSubId: error is " + e.getMessage());
    }
    return 0;
}
测试结果:
2021-10-08 16:40:59.323 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!
2021-10-08 16:41:02.378 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM1,无需切换!!!
2021-10-08 16:41:04.738 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM2!!!
2021-10-08 16:41:06.633 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM2,无需切换!!!
2021-10-08 16:41:14.577 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!
原始代码:
//SubscriptionManager.java

    /**
     * Returns the system's default data subscription id.
     *
     * On a voice only device or on error, will return INVALID_SUBSCRIPTION_ID.
     *
     * @return the default data subscription Id.
     */
    public static int getDefaultDataSubscriptionId() {
        return sDefaultDataSubIdCache.query(null);
    }

    /**
     * Set the subscription which will be used by default for data, with the subscription which
     * the supplied subscription ID corresponds to; or throw a RuntimeException if the supplied
     * subscription ID is not usable (check with {@link #isUsableSubscriptionId(int)}).
     *
     * @param subscriptionId the supplied subscription ID
     *
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
    public void setDefaultDataSubId(int subscriptionId) {
        if (VDBG) logd("setDataSubscription sub id = " + subscriptionId);
        try {
            ISub iSub = TelephonyManager.getSubscriptionService();
            if (iSub != null) {
                iSub.setDefaultDataSubId(subscriptionId);
            }
        } catch (RemoteException ex) {
            // ignore it
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值