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字段,如果校验不过,就进入拒接流程

日志如下

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐