Android 12 TCL设备通话日志查询报错:no such column: verstat
解决Android 12 TCL设备读取通话日志报错
no such column: verstat的问题 核心原因
TCL在Android 12的定制ROM中裁剪了通话日志Content Provider的verstat列,但你的代码通过cr.query(CallLog.Calls.CONTENT_URI, null, ...)查询所有列时,系统会自动拼接包含该不存在列的SQL语句,触发SQLite错误。
解决办法
放弃查询所有列的写法,明确指定你需要的字段(日期、号码、通话时长、通话类型)作为投影参数,避免访问厂商移除的系统列:
修改后的代码示例
// 定义需要的目标列数组 String[] projection = { CallLog.Calls.DATE, CallLog.Calls.NUMBER, CallLog.Calls.DURATION, CallLog.Calls.TYPE }; // 执行查询时传入指定的projection参数 Cursor cursor = cr.query( CallLog.Calls.CONTENT_URI, projection, // 替换原代码中的null null, // 按需设置查询条件 null, // 按需设置条件参数 null // 按需设置排序规则 );
额外提示
- 始终明确指定需要的列,既能规避厂商定制ROM的兼容性问题,还能减少内存占用、提升查询效率。
- 后续若需新增字段,逐个添加到projection数组即可,切勿再次使用
null作为投影参数。
内容的提问来源于stack exchange,提问作者Marco Napoletano
相关产品推荐
相关产品推荐

