telephony相关问题
背景描述
需求要求某些运营商卡apn type不隐藏xcap类型。
问题分析
1、apn设置在setting中packages\apps\Settings\src\com\android\settings\network\apn\ApnEditor.java
//UNISOC:check whether apn type xcap need to be hidden
apnType = hideApnMatchTypes(apnType,TYPE_XCAP);
mApnType.setText(apnType);
代码默认隐藏掉了xcap类型。
我们需要根据运营商判断,设置某些运营商不隐藏。
方案1
直接在setting里判断mccmnc和判断逻辑。这样比较容易实现,但是逻辑感觉比较蠢
方案2
使用CarrierConfig进行配置,新加一个key用来判断此标志位。
Setting中:
获取运营商配置,判断是否要隐藏xcap。
final CarrierConfigManager configManager = (CarrierConfigManager)
getSystemService(Context.CARRIER_CONFIG_SERVICE);
if (configManager != null) {
final PersistableBundle b = configManager.getConfigForSubId(mSubId);
if (b != null) {//读取运营商配置
hinddenXcapType = b.getBoolean(CarrierConfigManager.KEY_CARRIER_APN_XCAP_HIDDEN_BOOL, true);
}
}
后面根据hinddenXcapType 标志位添加显示隐藏逻辑即可。
framework/base中
我们需要新加一个key给Setting使用
frameworks\base\telephony\java\android\telephony\CarrierConfigManager.java
public static final String KEY_CARRIER_APN_XCAP_HIDDEN_BOOL = "carrier_apn_xcap_hidden_bool";
...
sDefaults.putBoolean(KEY_CARRIER_APN_XCAP_HIDDEN_BOOL, true);//默认隐藏
CarrierConfig配置
packages\apps\CarrierConfig\assets\carrier_config_carrierid_1535_Vodafone.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<carrier_config>
<boolean name="carrier_apn_xcap_hidden_bool" value="false" />
</carrier_config>
assets下面的文件配置一下就可以了。
carrierid在packages\providers\TelephonyProvider\assets\latest_carrier_id\carrier_list.textpb中,根据mccmnc查一下。
或者插入白卡,写号之后抓log看看carrierid。
结尾
我没找到哪里读取CarrierConfig里的配置,只看到一个默认值和一个xml配置。
有了解的小伙伴请留言交流一下
========================================================