来电流程分析
1.来电触发
当系统检测到来电事件时,进入来电处理流程。系统首先会对设备状态进行一系列校验,决定是否正常响铃或静默拒接。

来电时,整体流程图

2.状态校验
开机向导(OOBE)中维护两个关键字段,用于标识设备的初始化状态:
| 字段名 | 含义 | 存储位置 |
|---|---|---|
device_provisioned |
设备是否已完成激活 | SETTINGSDATA 表 |
user_setup_complete |
用户是否已完成开机向导 | USER_SETTINGSDATA_SECURE_100 表 |
这两个字段共同决定设备是否处于可正常接听来电的状态。任意一个字段为 0(未完成/未激活),系统均会拒接来电。
3. device_provisioned字段详解
3.1 存储位置
该字段存储在 settingsdata.db 数据库中:
数据库路径:
/data/app/el1/0/database/com.ohos.settingsdata/entry/rdb/settingsdata.db
相关表:
-
SETTINGSDATA表 --- 存储device_provisioned字段
3.2 写入时机
开机向导应用(OOBE)在用户成功完成注册后,将 device_provisioned 字段设置为 1,表示设备已激活。
3.3 通话场景影响
当设备作为被叫方时,系统在校验流程中检查 device_provisioned 字段的值:
-
字段值为 0(设备未激活):系统直接进入拒接(Reject)流程,来电被静默拒绝
-
字段值为 1(设备已激活):继续后续校验
3.4 异常表现
当 device_provisioned = 0 时:
-
用户无法看到来电振铃界面
-
来电无任何界面提示
-
流程直接走入拒接分支
该字段存储在 SETTINGSDATA 表中,具体作用如下:
-
写入时机:开机向导应用在用户成功完成注册后,将
device_provisioned字段设置为 1,表示设备已激活。
-
通话场景:当设备来电时,系统会检查
device_provisioned字段的值:-
若该字段为 0(设备未激活),系统将直接拒接来电。
-
此情况下,用户无法看到来电振铃界面,来电被静默拒绝。
-
settingsdata.db数据库中有3个表,我们要关注其中的SETTINGSDATA表和USER_SETTINGSDATA_SECURE_100表

SETTINGSDATA表的device_provisioned字段

通话流程中,来电时,无法拉起振铃界面
原因是流程走入到拒接(Reject)流程,没有拉起界面
4. user_setup_complete字段
4.1 存储位置
该字段同样存储在 settingsdata.db数据库中,位于 USER_SETTINGSDATA_SECURE_100 表。
4.2 字段含义
-
值为 1:用户已完成开机向导
-
值为 0:用户未完成开机向导

5.源码分析
IsRejectCall()判断是否拒接

ShouldRejectIncomingCall()判断是否要拒接来电

ShouldRejectIncomingCall()可以看到
1911行,在校验device_provisioned字段,如果校验不过,就进入拒接流程
1928行,在校验user_setup_complete字段,如果校验不过,就进入拒接流程

日志如下

更多推荐

所有评论(0)