没有合适的资源?快使用搜索试试~ 我知道了~
首页Android CarrierConfig介绍
Android CarrierConfig介绍
5星 · 超过95%的资源 需积分: 42 14 下载量 33 浏览量
更新于2023-05-05
1
收藏 342KB PDF 举报
CarrierConfig的3种获取途径: 1). 系统初始化CarrierConfigManager中的默认值. 2). AOSP CarrierConfig app配置的值 3). 获取其他Carrier APP的值 主要流程: 1. SIM卡加载成功则触发更新Carrier config流程。 2. CarrierConfigLoader中加载对应SIM卡配置的Carrier config
资源详情
资源推荐
Android CarrierConfig介绍
一. Andorid CarrierConfig作用一. Andorid CarrierConfig作用
通常我们做公开市场的项目,终端用户买了手机后可能插入任何运营商的卡,而不同的运营商对手机上一些默认配置
的要求不一样,比如短信/彩信网络设置、通话设置、漫游非漫游设置、IMS支持情况设置等等。AOSP提供了一种机制,
同一版本软件,针对不同运营商可以配置不同的参数(以mcc/mnc区分),从而实现这些需求的客制化。
CarrierConfigManager.java里面可以查看可配置的功能非常多,例如:
//SMS text length threshold (in bytes) to turn into MMS
public static final String KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT =
"smsToMmsTextLengthThreshold";
/**
* Boolean indicating if the "Call forwarding" item is visible in the Call Settings menu.
* true means visible. false means gone.
* @hide
*/
public static final String KEY_CALL_FORWARDING_VISIBILITY_BOOL =
"call_forwarding_visibility_bool";
/**
* List of operators considered non-roaming which won't show roaming icon.
* <p>
* Can use mcc or mcc+mnc as item. For example, 302 or 21407.
* If operators, 21404 and 21407, make roaming agreements, users of 21404 should not see
* the roaming icon as using 21407 network.
* @hide
*/
public static final String KEY_NON_ROAMING_OPERATOR_STRING_ARRAY =
"non_roaming_operator_string_array";
/**
* Default value for {@link Settings.Global#DATA_ROAMING}
* @hide
*/
public static final String KEY_CARRIER_DEFAULT_DATA_ROAMING_ENABLED_BOOL =
"carrier_default_data_roaming_enabled_bool";
/**
* Flag specifying whether VoLTE should be available for carrier, independent of carrier
* provisioning. If false: hard disabled. If true: then depends on carrier provisioning,
* availability, etc.
*/
public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
/**
* Flag specifying whether video telephony is available for carrier. If false: hard disabled.
* If true: then depends on carrier provisioning, availability, etc.
*/
public static final String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
/**
* Flag specifying whether WFC over IMS should be available for carrier: independent of
* carrier provisioning. If false: hard disabled. If true: then depends on carrier
* provisioning, availability etc.
*/
public static final String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
二. CarrierConfig的获取方式二. CarrierConfig的获取方式
以平台通过Carrier Config判断是否支持VoLTE流程为例:
//
通过
ServiceManager
访问
carrier_config
mConfigManager = (CarrierConfigManager) context.getSystemService(
Context.CARRIER_CONFIG_SERVICE);
/**
* Returns a platform configuration for VoLTE which may override the user setting on a per Slot
* basis.
*/
public boolean isVolteEnabledByPlatform() {
// We first read the per slot value. If doesn't exist, we read the general value. If still
// doesn't exist, we use the hardcoded default value.
if (SystemProperties.getInt(
PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE + Integer.toString(mPhoneId),
SYSTEM_PROPERTY_NOT_SET) == 1 ||
SystemProperties.getInt(PROPERTY_DBG_VOLTE_AVAIL_OVERRIDE,
SYSTEM_PROPERTY_NOT_SET) == 1) {
return true;
}
return mContext.getResources().getBoolean(
com.android.internal.R.bool.config_device_volte_available)
&& getBooleanCarrierConfig(CarrierConfigManager.KEY_CARRIER_VOLTE_AVAILABLE_BOOL)
&& isGbaValid();
}
/**
* Get the boolean config from carrier config manager.
*
* @param key config key defined in CarrierConfigManager
* @return boolean value of corresponding key.
*/
private boolean getBooleanCarrierConfig(String key) {
int[] subIds = SubscriptionManager.getSubId(mPhoneId);
int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
if (subIds != null && subIds.length >= 1) {
subId = subIds[0];
}
PersistableBundle b = null;
if (mConfigManager != null) {
// If an invalid subId is used, this bundle will contain default values.
b = mConfigManager.getConfigForSubId(subId);
}
if (b != null) {
return b.getBoolean(key);
} else {
// Return static default defined in CarrierConfigManager.
return CarrierConfigManager.getDefaultConfig().getBoolean(key);
}
}
//
重点看
getConfigForSubId
函数
config
从哪里获取
PersistableBundle getConfigForSubId(int subId) {
...
int phoneId = SubscriptionManager.getPhoneId(subId);
//
获取系统默认值
PersistableBundle retConfig = CarrierConfigManager.getDefaultConfig();
if (SubscriptionManager.isValidPhoneId(phoneId)) {
//
获取
AOSP
默认
CarrierConfig app
配置的值
PersistableBundle config = mConfigFromDefaultApp[phoneId];
if (config != null) {
retConfig.putAll(config);
retConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true);
}
//
获取其他
APP
值
config = mConfigFromCarrierApp[phoneId];
if (config != null) {
retConfig.putAll(config);
retConfig.putBoolean(CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL, true);
}
}
return retConfig;
}
从上面流程看,Config的获取有3中途径:
1). 系统初始化CarrierConfigManager中的默认值.
2). AOSP CarrierConfig app配置的值
3). 获取其他Carrier APP的值
PS: 对于系统开发,我们重点关注前面2点,第3点是google做的扩展功能,暂时没有额外开发第三方Carrier APP。
三. CarrierConfig的配置三. CarrierConfig的配置
1. 系统初始化系统初始化CarrierConfigManager中的默认配置中的默认配置 .
在不插卡或者CarrierConfig应用里面不做任何配置的情况下,会取到系统端设定的默认值。这个默认值软件根据需求可
以做调整。
CarrierConfigManager.java文件中初始化默认值:
static {
sDefaults = new PersistableBundle();
sDefaults.putBoolean(KEY_ALLOW_HOLD_IN_IMS_CALL_BOOL, true);
sDefaults.putBoolean(KEY_CARRIER_ALLOW_DEFLECT_IMS_CALL_BOOL, false);
sDefaults.putBoolean(KEY_ALWAYS_PLAY_REMOTE_HOLD_TONE_BOOL, false);
sDefaults.putBoolean(KEY_AUTO_RETRY_FAILED_WIFI_EMERGENCY_CALL, false);
sDefaults.putBoolean(KEY_ADDITIONAL_CALL_SETTING_BOOL, true);
sDefaults.putBoolean(KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL, false);
sDefaults.putStringArray(KEY_UNLOGGABLE_NUMBERS_STRING_ARRAY, null);
剩余11页未读,继续阅读
MC_Ten
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功