有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在安卓 broadcastreceiver中未找到java新呼叫日志记录

我正在开发一个安卓应用程序,当然,它需要将电话登录到服务器上,以供个人使用。我已为此注册了broadcastreceiver,我能够检测所有类型的呼叫及其详细信息。然而,不可能检测出准确的传出呼叫时间,即,我们可以检测出不完全是通话持续时间的传出呼叫的完整摘机时间。因此,只有在传出呼叫结束的情况下,我才尝试从呼叫日志历史记录中读取记录。我能够从broadcastreceiver读取传出呼叫结束的呼叫日志历史记录,但在呼叫日志条目中看不到当前已接收呼叫的条目。我可以看到呼叫历史记录中以前的所有呼叫,但看不到我收到的broadcastreceiver的呼叫。我在代码中使用了来自here的Gabe Sechan示例。我试着阅读outgoingcallended方法中的最新调用历史记录,如下所示

    ContentResolver crs = globalContext.getContentResolver();
    Cursor cr = getAllCallLogs(crs);
    if(cr.moveToFirst()){
       duration = cr.getString(cr
                .getColumnIndex(安卓.provider.CallLog.Calls.DURATION));
        callNumber = cr.getString(cr
                .getColumnIndex(安卓.provider.CallLog.Calls.NUMBER));
       

    }
    private Cursor getAllCallLogs(ContentResolver cr) {
    // reading all data in descending order according to DATE
    String strOrder = 安卓.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是以前的呼叫号码,而不是我收到BroadcastReceiver的号码,持续时间也是如此。 我知道,当我试图阅读通话记录时,它还没有更新,那么我该如何解决这个问题呢?我错过了什么


共 (1) 个答案

  1. # 1 楼答案

    您必须在getContentResolver()之前添加一些延迟,以便更新表。您可以添加任意一个线程。sleep()或可以使用处理程序

    public void loadCursorPostDelayed(){
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
    
                ContentResolver crs = globalContext.getContentResolver();
                ...
            }
        }, 1500);
    }
    

    }