Android 当存在双卡时,移动网络默认为SIM卡1

本文详细描述了如何在Android13MTK平台的设备上,将移动网络默认设置为SIM卡1,并处理开机时的双卡选择对话框。主要涉及MtkMultiSimSettingController.java的updateDefaults方法和config_voice_data_sms_auto_fallback配置的修改。
摘要由CSDN通过智能技术生成

一、当Android设备中存在双卡时,移动网络默认为SIM卡1

完成这个需求有以下两个修改点:

   下面依旧是Android13 MTK平台,在MtkMultiSimSettingController.java的updateDefaults()方法中将移动网络设置为SIM1。

   除此之外,当存在双卡时,开机进入到Launcher界面时,首先就会出现一个对话框让我们去选择使用SIM卡1还是SIM卡2。所以当我们设置为默认SIM卡1之后,这个弹窗我们也需要去除掉。

  1. 可以加入自己的判断,直接将autoFallbackEnabled重新赋值
  2. 也可以在frameworks/base/core/res/res/values/config.xml,修改config_voice_data_sms_auto_fallback

二、下面是完整的代码路径和修改点

system/vendor/mediatek/proprietary/frameworks/opt/telephony/src/java/com/mediatek/internal/telephony/MtkMultiSimSettingController.java
    @Override
    protected void updateDefaults() {
    	//........省略多余代码.........
    
        boolean dataSelected = updateDefaultValue(mPrimarySubList,
                mSubController.getDefaultDataSubId(),
                (newValue ->{
                
                    // The default mobile network is SIM 1
                    int defaultSubId = mSubController.getDefaultDataSubId();
                    if(defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID){
                        int subId1 = mSubController.getSubIdUsingPhoneId(0);
                        if(subId1 == newValue){
                            mSubController.setDefaultDataSubId(newValue);
                        }
                    }
                }));
                // The default mobile network is SIM 1
                
         // Update default voice subscription.
        if (DBG) log("[updateDefaultValues] Update default voice subscription");
        boolean voiceSelected = updateDefaultValue(mPrimarySubList,
               	mSubController.getDefaultVoiceSubId(),
                (newValue -> mSubController.setDefaultVoiceSubId(newValue)));
                
		//........省略多余代码.........
	
        boolean autoFallbackEnabled = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_voice_data_sms_auto_fallback);

        // Based on config config_voice_data_sms_auto_fallback value choose voice/data/sms
        // preference auto selection logic or display notification for end used to
        // select voice/data/SMS preferences.
        
        // Removes the mobile network selection popup begin
        autoFallbackEnabled = true;
        // Removes the mobile network selection popup end
        
        if (!autoFallbackEnabled) {
            sendSubChangeNotificationIfNeeded(change, dataSelected, voiceSelected, smsSelected);
        } else {
            updateUserPreferences(mPrimarySubList, dataSelected, voiceSelected, smsSelected);
        }
    }
越想贴近事实,不明白的事情就越多。
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于Android双卡切换,可以使用TelephonyManager类中的方法进行实现。以下是一个示例代码: ```java TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); int currentSimMode = Settings.System.getInt(getContentResolver(), Settings.System.MSIM_MODE_SETTING, -1); if (currentSimMode == 1 || currentSimMode == 0) { // 双卡模式,需要进行切换 int newSimMode = currentSimMode == 1 ? 0 : 1; // 0为单卡模式,1为双卡模式 Settings.System.putInt(getContentResolver(), Settings.System.MSIM_MODE_SETTING, newSimMode); tm.setDataEnabled(false); // 关闭数据连接 try { Thread.sleep(2000); // 等待2秒钟 } catch (InterruptedException e) { e.printStackTrace(); } tm.setDataEnabled(true); // 打开数据连接 } ``` 该代码首先获取TelephonyManager实例,并通过Settings.System.getInt()方法获取当前的双卡模式。如果当前是双卡模式,则进行切换操作,将双卡模式改为单卡模式(0),或者将单卡模式改为双卡模式(1)。然后关闭数据连接,等待2秒钟后再打开数据连接即可完成切换。 需要注意的是,该代码需要在AndroidManifest.xml中添加如下权限: ```xml <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> ``` 同时,该代码在Android 10及以上版本中可能会出现无法修改Settings.System的问题,需要使用Settings.Secure来替代。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值