首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >android broadcastreceiver中找不到新的通话记录

android broadcastreceiver中找不到新的通话记录
EN

Stack Overflow用户
提问于 2016-09-20 03:29:10
回答 1查看 521关注 0票数 0

我正在工作的android应用程序,需要电话被记录在服务器上,当然是个人使用。我已经为此目的注册了broadcastreceiver,我能够检测所有类型的呼叫及其详细信息。然而,不可能检测到准确的呼出时间,也就是说,我们可以检测到完全的OFFHOOK时间,因为它不是精确的通话时长。因此,只有在去电结束的情况下,我才会尝试从呼叫日志历史记录中读取记录。我可以从broadcastreceiver中读取呼出呼叫结束的呼叫日志历史记录,但在呼叫日志条目中看不到当前收到的呼叫条目。我可以在呼叫历史记录中看到所有以前的呼叫,但不能看到我接收到broadcastreceiver的呼叫。我在我的代码中使用了来自here的Gabe Sechan示例。我尝试在outgoingcallended方法中读取最新的调用历史,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
    ContentResolver crs = globalContext.getContentResolver();
    Cursor cr = getAllCallLogs(crs);
    if(cr.moveToFirst()){
       duration = cr.getString(cr
                .getColumnIndex(android.provider.CallLog.Calls.DURATION));
        callNumber = cr.getString(cr
                .getColumnIndex(android.provider.CallLog.Calls.NUMBER));
       

    }
    private Cursor getAllCallLogs(ContentResolver cr) {
    // reading all data in descending order according to DATE
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
    Uri callUri = Uri.parse("content://call_log/calls");
    Cursor cur = cr.query(callUri, null, null, null, strOrder);

    return cur;
    }

但callNumber是以前的呼叫号码,而不是我收到broadcastreciver的号码,持续时间也是如此。我知道,当我尝试读取呼叫日志时,它没有更新,那么我如何解决这个问题?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 13:27:54

您必须在getContentResolver()之前添加一些延迟,以便更新该表。您可以添加Thread.sleep(),也可以使用handler。

代码语言:javascript
代码运行次数:0
运行
复制
public void loadCursorPostDelayed(){
    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            ContentResolver crs = globalContext.getContentResolver();
            ...
        }
    }, 1500);
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39580668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档