Android 12.0 双sim卡区分SIM卡1和SIM卡2来电通知功能实现

1.前言

在12.0的rom系统定制化开发中,在一些产品支持双卡双待的功能中,如果两张sim卡都是移动卡,在来电通知中,就不容易区分到底是哪张sim卡来的电话信息都显示移动信息 所以为了区分sim卡就需要在sim描述的时候 添加是哪张sim卡,接下来就来实现这些功能

2.双sim卡区分SIM卡1和SIM卡2来电通知功能实现的核心类

packages\services\Telephony\src\com\android\services\telephony\TelecomAccountRegistry.java

3.双sim卡区分SIM卡1和SIM卡2来电通知功能实现的核心功能分析和实现

Android在双卡双待的手机中会有两张SIM卡,每张SIM卡是一个PhoneAccount,PhoneAccount对象是在TelecomAccountRegistry.java
中,在这个类中负责监听注册PhoneAccount的相关信息
SubscriptionController的addSubInfoRecord方法,里面包括sim卡的信息,并且将这些信息保存到了TelephonyProvider数据库中
TelecomManager和TelephonyManager都有getTelecomService方法,这个Service的实现在TelecomServiceImpl类中。TelephonyManager有getITelephony方法,这个Service的实现是在PhoneInterfaceManager类中。

3.1 TelecomAccountRegistry.java中相关源

### 如何在Android源码中实现禁用SIM1SIM2 #### 实现禁用SIM功能的关键点 在Android框架中,禁用特定SIM(如12)可以通过修改核心服务类来实现。具体来说,`PhoneWindowManager.java` `ShutdownThread.java` 是两个重要的文件[^1]。此外,在Android 12.0版本中引入了更具体的逻辑用于处理多张SIM的情况[^3]。 为了实现禁用指定SIM功能,可以按照以下方式调整代码: 1. **获取SIM状态** Android SDK提供了API用于检测SIM的存在与否以及其状态。这通常通过`TelephonyManager`类完成[^2]。 ```java TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int simStateSlot1 = telephonyManager.getSimStateGemini(0); // 获取SIM1的状态 int simStateSlot2 = telephonyManager.getSimStateGemini(1); // 获取SIM2的状态 ``` 上述代码片段展示了如何分别查询双卡设备上第一个第二个SIM插槽的状态。 2. **禁用指定SIM** 在系统启动完成后,即`systemReady()`函数执行之后,可以通过调用`shutdownRadio()`方法关闭无线电通信模块从而达到禁用目的。此过程涉及遍历所有可用的电话实例并针对目标SIM应用该操作。 下面是一个简化版的例子展示如何仅禁用第二张SIM: ```java public void disableSpecificSim(int slotIndex){ List<Phone> phones = PhoneFactory.getPhones(); for (Phone phone : phones){ if(phone.getSubscriptionInfo().getSimSlotIndex() == slotIndex){ phone.shutdownRadio(); break; // 停止进一步搜索一旦找到匹配项即可退出循环 } } } ``` 这里假设已经存在一个有效的上下文环境,并且能够访问到所有的`Phone`对象列表。注意实际项目可能还需要考虑更多边界条件及异常情况处理等问题。 3. **集成至Framework层** 将上述自定义逻辑嵌入到现有Framework架构当中去,则需参照官方文档说明或者已有案例研究最佳实践路径。一般情况下建议新增独立接口而非直接改动原生组件行为以免影响其他正常业务流程运行效率等方面考量因素较多因此务必谨慎行事。 #### 注意事项 - 修改Android Framework属于高度侵入性的变更动作,可能会带来兼容性稳定性风险。 - 针对企业级解决方案而言,推荐优先评估是否有更高层次的应用程序层面可满足相同需求而无需深入到底层更改之中。 - 测试阶段应覆盖尽可能广泛的机型配置组合以验证最终效果一致性表现良好无明显缺陷残留现象发生几率最小化为目标导向原则之一始终贯穿整个开发周期全过程环节始终不变坚持下去就一定会有收获!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值