You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ContentResolver删除FDN(固定拨号号码)失败问题求助

FDN固定拨号删除操作失效问题解决

核心排查与解决方案

1. 确认使用正确的FDN操作Uri

FDN固定拨号对应的Content Uri是ContactsContract.FixedDialingNumbers.CONTENT_URI,而非普通联系人的Uri。误用普通联系人Uri会导致删除操作不生效,但系统返回虚假的删除行数。

2. 修正Where子句语法与参数绑定

你的where子句存在语法错误(如单引号配对错误),建议使用参数绑定方式构造查询条件,避免字符串拼接导致的语法问题:

// 正确的参数绑定写法
String whereClause = "number = ? AND tag = ? AND pin2 = ?";
String[] selectionArgs = new String[]{"132413", "exp", "141234"};
int deletedRows = getContentResolver().delete(
    ContactsContract.FixedDialingNumbers.CONTENT_URI,
    whereClause,
    selectionArgs
);

注意:number字段可能存储带国家代码的格式(如+86132413),需确保匹配实际存储的号码格式,否则会出现匹配不到记录但返回删除行数的情况。

3. 验证PIN2的有效性与前置验证

FDN操作依赖SIM卡的PIN2码,部分设备要求先验证PIN2再执行删除:

// 先验证PIN2
boolean pinValid = ContactsContract.FixedDialingNumbers.setPin(
    getContentResolver(),
    "141234" // 你的SIM卡PIN2码
);
if (pinValid) {
    // 验证成功后执行删除,此时可无需在where子句中重复传入pin2
    String whereClause = "number = ? AND tag = ?";
    String[] selectionArgs = new String[]{"132413", "exp"};
    int deletedRows = getContentResolver().delete(
        ContactsContract.FixedDialingNumbers.CONTENT_URI,
        whereClause,
        selectionArgs
    );
}

如果PIN2码错误,即使系统返回删除行数,SIM卡层面也会拒绝执行删除操作。

4. 排除缓存与查询验证问题

删除后需重新查询FDN列表确认结果,可通过getContentResolver().notifyChange(ContactsContract.FixedDialingNumbers.CONTENT_URI, null)触发数据刷新,避免缓存导致的误判。


内容的提问来源于stack exchange,提问作者HeyJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:07:35