Xamarin调试求助:无法完整查看CallLog权限报错信息
嗨,我之前也踩过Live Player这个错误提示的坑,它自带的提示不仅短还秒没,完全没法排查问题。给你几个实用的方法来获取完整的错误信息:
1. 查看Visual Studio的输出窗口
这是最直接的方式,Live Player运行时的所有日志都会输出到这里,不会被截断也不会自动消失:
- 打开Visual Studio,点击顶部菜单的
View->Output(或者直接按快捷键Ctrl+W, O) - 在输出窗口顶部的下拉菜单里,选择
Xamarin Diagnostics或者Debug选项,你就能找到完整的权限拒绝错误信息,包括被截断的com.开头的完整包名和权限详情。
2. 在代码里手动捕获并输出完整异常
把你访问CallLog的逻辑用try-catch包裹,强制输出完整的异常信息——这招对付各种截断提示都好用:
try { // 这里放你获取通话日志的代码,比如: var callLogCursor = ContentResolver.Query(CallLog.Calls.ContentUri, null, null, null, null); } catch (Exception ex) { // 输出到调试窗口,在Visual Studio的Output里就能看到 System.Diagnostics.Debug.WriteLine("完整错误详情:\n" + ex.ToString()); // 测试阶段也可以直接弹个对话框显示(正式环境建议去掉) await DisplayAlert("错误详情", ex.ToString(), "确定"); }
ex.ToString()会输出异常的完整堆栈信息,包括被截断的权限拒绝描述,不管Live Player的提示怎么消失,你都能稳稳拿到全部内容。
3. 顺便排查权限问题(毕竟你遇到的是权限拒绝错误)
既然错误开头是permission denial,大概率是权限没配置对:
- 先在Android项目的
AndroidManifest.xml里添加静态权限声明:
<uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
- 针对Android 6.0(API 23)及以上的设备,还需要动态申请权限,你可以在访问CallLog前先调用权限请求逻辑,避免权限不足的报错。
内容的提问来源于stack exchange,提问作者Anders
相关产品推荐
相关产品推荐

